一.导依赖

<dependency>

    <groupId>com.github.abel533</groupId>

    <artifactId>mapper</artifactId>

    <version>2.3.4</version>

</dependency>

二.配置拦截器

在mybatis-config.xml里面配置		
		<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
			<!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->
			<property name="IDENTITY" value="MYSQL" />
			<!--通用Mapper接口,多个通用接口用逗号隔开(这个是通用Mapper给我们提供的被继承的接口,包括基本的crud操作) -->
			<property name="mappers" value="com.github.abel533.mapper.Mapper" />
		</plugin>
 或者在sqlSessionFactory里注入
		<property name="plugins">
   		  <array>
      			<bean class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/>
  		  </array>
  		</property>


三.对实体类进行注解,如@Table,@Id等

在继承用用Mapper的接口的时候,需要指定Mapper的泛型,这个泛型就是指实体类.而这个实体类必须要符合以下规范:

1.通用Mapper会默认为表名=实体类名,驼峰的话会转下划线,如UserInfo类对应的表为user_info

2.如果上一条不满足的话,则可以在实体类上面加注解@Table(name="tablename")

3.通用Mapper会默认将实体类的属性转为表的字段

4.如果上一条不满足的话,加注解@Column(name="fieldname")

5.实体类的有些属性 没有对应表的字段的话,则要在这个属性上面加上注解@Transient,表示将这个属性忽略

6.通用Mapper有几个方法是需要主键的,如selectByPrimaryKey等,所以可以在主键对应的实体类属性上加上注解@Id,声明这个属性是主键属性,如果不加的话,所有的属性都会作为主键进行使用,这样会很大程度的影响效率

7.因为基本类型在对象初始化的时候会默认值,无法消除,所以实体类尽量使用包装类

8.Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。

这三种方式不能同时使用,同时存在时按照 序列>UUID>主键自增的优先级进行选择.

序列://可以用于数字类型,字符串类型(数据库支持自动转型)的字段,@SequenceGenerator(name="Any",sequenceName="seq_userid"),该字段不会回写id

UUID:@GeneratedValue(generator = "UUID")该字段不会回写id

主键自增:不限于@Id注解的字段,但是一个实体类中只能有一个@GeneratedValue(strategy = GenerationType.IDENTITY),会回写id


四.继承Mapper接口

public interface UserMapper extends Mapper<User> {}

注:通用Mapper只支持对单表的操作,如果多表的话,可以自己在映射文件中另外写sql.


题外话:学完通用Mapper后,想自己写篇文章来巩固的,就按着学习资料来写,结果写到一半,发现通用Mapper的缔造者已经写过一篇详细的了,本想放弃的,但是想到大神的那篇博客太详细了,初学者可能会看懵,我这篇更容易上手一些,就继续写下来了.

附上大神的博客:http://blog.csdn.net/isea533/article/details/41457529?locationNum=2&fps=1

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐