通用mapper的介绍和入门使用
简介
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。
极其方便的使用MyBatis单表的增删改查。
支持单表操作,不支持通用的多表联合查询。
通用 Mapper 支持 Mybatis-3.2.4 及以上版本。
与传统mapper.xml中写sql比较通用mapper
1.mapper.xml文件里有大量的sql,当数据库表字段变动,配置文件就要修改
2.需要自己实现sql分页,select * from table where . . . limit 1,3
自己手写分页,除了传参page、pageSize,还需要返回条目总数count。
3.数据库可移植性差:如果项目更换数据库,比如oracle–>mysql,mapper.xml中的sql要重新写,因为Oracle的PLSQL 和mysql 支持的函数是不同的。
4.生成的代码量过大。
5.批量操作,批量插入,批量更新,需要自写。
通用mapper底层基于反射机制拼处xml形式的sql然后去执行,所以性能上会多消耗一些时间,不过微乎其微
使用快速入门
第一步:导包
<!-- mybatis 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
第二步:springboot配置
################## Mybatis配置
mybatis:
type-aliases-package: cn.com.cdboost.charge.operations.model
mapper-locations: classpath*:/mapper/*Mapper.xml
################## Mapper
mapper:
mappers: cn.com.cdboost.charge.operations.common.CommonMapper
not-empty: false
identity: MYSQL
################### PageHelper
pagehelper:
helperDialect: mysql
reasonable: true #为了使用输入页数为负或者超出最大页时候使页数为最小或最大值
supportMethodsArguments: true
params: count=countSql
################## Druid Datasource配置
spring:
datasource:
druid:
# 驱动配置信息
# db-type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: urllllll
username: aaaaaa
password: bbbbbb
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
第三步:准备实体类
@Table(name = "表名")
public class OperationsLog implements Serializable {
@GeneratedValue(strategy = GenerationType.IDENTITY)//自动增长
@Id //主键
private Integer id;
@Column(name = "字段名")
private String username;
第四步:准备一个通用mapper集成其他接口的功能
ublic interface CommonMapper<T> extends
Mapper<T>,
MySqlMapper<T>,
IdsMapper<T>,
IdListMapper<T,Object>,
ConditionMapper<T> {
default int deleteWithVersion(T t){
int result = delete(t);
if(result == 0){
throw new RuntimeException("删除失败!");
}
return result;
}
default int deleteByPrimaryKeyWithVersion(T t) {
int result = deleteByPrimaryKey(t);
if(result == 0){
throw new RuntimeException("删除失败!");
}
return result;
}
default int updateByPrimaryKeyWithVersion(T t){
int result = updateByPrimaryKey(t);
if(result == 0){
throw new RuntimeException("更新失败!");
}
return result;
}
default int updateByPrimaryKeySelectiveWithVersion(T t){
int result = updateByPrimaryKeySelective(t);
if(result == 0){
throw new RuntimeException("更新失败!");
}
return result;
}
}
最后:测试
@Resource
private OperationsLogMapper operationsLogMapper;
@Test
public void test01(){
List<OperationsLog> operationsLogs = operationsLogMapper.selectAll();
operationsLogs.forEach(e-> System.out.println(e.getUserName()));
}
总结
1.这种方式比较起来更适合增删改查一些简单的操作,如果需要复杂的操作,仍然可以使用以前的mapper.xml方式进行数据库操作。
2.关于分页可以使用更加简单的方式:PageHelper,下次再说这个。
3.关于筛选高级查询,可以使用Condition类来进行,下次单独说。