文章目录
mapper简介
通用mapper是一个可以实现任意Mybatis通用方法的框架,项目提供了常规的增删改查操作以及Example相关的表单操作。
官网
Mybatis的痛点
mapper.xml
文件里有大量的sql,当数据库表字段变动,配置文件就要修改- 需要自己实现sql分页,如:select * from table where … limit 1, 10,自己写分页,除了传参
page
、pageSize
,还需要返回条目总数count
- 数据库可移植性差,如果项目更好数据库,如Oracle->MySQL,
mapper.xml
中的sql要重写,因为Oracle的PLSql和MySQL支持的函数不同 - 生成的代码量大,会生成非常多的mapper.xml文件
- 批量操作,如插入、更新,需要手写
而这些可以通过通用mapper解决
使用通用Mapper
和Spring集成
- 引入依赖
Spring和Mybatis的依赖如下:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>Version</version>
</dependency>
在此基础上,添加通用Mapper
的依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>Version</version>
</dependency>
- 与Spring集成
只需要把原来配置文件中的org.mybatis.spring.mapper.MapperScannerConfigurer
换成tk.mybatis.spring.mapper.MapperScannerConfigurer
即可
即原来的配置是
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="扫描包名"/>
</bean>
现在的是
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="扫描包名"/>
</bean>
实体类映射
@Table(name="tb_user")
public class User implments Serializable{
@Id
private Integer id;
private String name;
//getter setter...
}
@Table
映射表,@Id
映射表的主键
创建mapper接口
public interface UserMapper extends Mapper<User>{}
Mapper
是tk.mybatis.mapper.common.Mapper
类,继承了该类的接口指定了泛型类型后,自动拥有针对泛型类型的大量方法:
接口方法说明
基础接口select
- List select(T record):根据T对象中的属性名称查询,类似于
select * from table as t where t.name=#{name} and t.password=#{password}
- T selectOne(T record):根据实体中的属性进行查询,只能有一个返回值,有多个结果时抛出异常,查询条件使用等号
- T selectByPrimaryKey(Object key):根据主键查询,方法参数必须包含完整的主键属性,查询条件使用等号
- int selectCount(T record):根据实体中的属性查询总数,查询条件使用等号
基础接口insert
- int insert(T record):保持一个实体,null的属性也会保存,不会使用数据库默认值
- int insertSelective(T record):保持一个实体,null的属性也会保存,使用数据库默认值
基础接口update
- int updateByPrimaryKey(T record):根据主键更新实体全部字段,null值会被更新,不使用数据库默认值
- int updateByPrimaryKeySelective(T record):根据主键更新实体全部字段,null值会被更新,使用数据库默认值
基础接口delete
- int delete(T record):根据实体属性为条件进行删除,查询条件使用等号
- int deleteByPrimaryKey(Object key):根据主键进行删除,方法参数必须包含完整的主键属性