一.导依赖
<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
新闻热点
疑难解答