目录
简介:
springboot整合mybatis-plus
1.在springboot项目中添加mybatis-plus依赖
2.配置mybatis-plus参数
3.启动类修改
关于mybatis-plus插件与特性
1. 主键自动生成
2.支持 ActiveRecord 模式
3.代码生成器.
4.内置分页插件
5. 内置性能分析插件
6.自动填充
7.乐观锁
8.逻辑删除
简介:
mybatis-plus是一个mybatis的增强工具,只是在mybatis的基础上只做了增强,不做改变,为简化开发而生,提高效率而生.
特性:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
springboot整合mybatis-plus
1.在springboot项目中添加mybatis-plus依赖
com.baomidou
mybatis-plus-boot-starter
3.4.0
mysql
mysql-connector-java
8.0.26
runtime
com.baomidou mybatis-plus-boot-starter3.4.0 mysql mysql-connector-java8.0.26 runtime
如果只是用mybatis-plus 只添加这两个个依赖就可以了 如果需要使用代码生成工具,还需要添加下面的依赖
com.baomidou mybatis-plus-generator3.4.0 org.apache.velocity velocity-engine-core2.3 org.slf4j slf4j-simple2.0.0-alpha5 test org.projectlombok lomboktrue com.github.xiaoymin swagger-bootstrap-ui1.9.6 io.springfox springfox-swagger22.9.2
关于代码生成工具的使用请看Mybatis-Plus Generator代码自动生成工具体验_if_icanfly的博客-CSDN博客AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。1.导入依赖 ,需要引用的依赖如下
2.配置mybatis-plus参数
配置文件application.properties中添加如下配置(未配置连接池信息)
## 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blogs?characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
## mybatis-plus 配置
# 控制台打印sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# mapper.xml路径
mybatis-plus.mapper-locations=classpath:mapper
List selectAllComments(Page page, Object o);
}
2.2在xml中添加这个查询的方法
测试:
@Test
public void addTest() {
// 1.表示第一页 10表示查10调数据
Page page = new Page<>(1, 10);
//我们自己写的sql也可以添加分页,只需要向上面的selectPage一样 传入一个分页参数page
commentsMapper.selectAllComments(page, null);
}
查询结果:
5. 内置性能分析插件
注册性能分析插件 IllegalSQLInnerInterceptor
@Configuration
public class MybatisConfig {
// mybatis-plus插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件 注意数据库的类型 这里使用的mysql
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// sql 性能规范插件
interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
return interceptor;
}
}
关于性能分析插件的描述,在源码中的描述如下
个人觉得要加这玩意就要在项目刚开始的时候加,做了一半或者完成了才加会让你想死
比如:mybatis-plus自带的分页查询 如果最后生成的sql查询没带where条件就会报错
@Test
public void addTest() {
// 1.表示第一页 10表示查10调数据
Page page = new Page<>(1, 10);
// 构建查询条件对象
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("id","10");
//commentsMapper.selectPage(page, wrapper);
// 如果没有查询条件 这里的wrapper可以传null
commentsMapper.selectPage(page, null);
//我们自己写的sql也可以添加分页,只需要向上面的selectPage一样 传入一个分页参数page
//commentsMapper.selectAllComments(page, null);
}
上面mybatis-plus自带的selectPage 没有条件的时候生成的sql是没有where条件的 这时候执行先查询就会报一个非法sql的错误
3.2.0版本以后去掉了PerformanceInterceptor 之前的性能分析插件可以设置最大执行时间,通过设置这个时间我们能筛选出执行效率极差的sql 但是在3.2.0以后去掉了这个插件
6.自动填充
阿里巴巴开发手册: 所有的数据库表,gmt_create,gmt_modified都要配上 而且需要自动化
方式一就是设置数据库字段默认值为当前时间 且为自动更新
创建时间设置默认值为CURRENT_TIMESTAMP 系统当前时间
更新时间也设置为系统当前时间,并且勾选自动更新
方式二 代码级别的
首先不需要设置数据库的自动更新与默认时间
实体类需要添加注解
编写一个处理器来处理这个注解
@Component
public class MymetaObjectHandler implements metaObjectHandler {
// 插入操作处理
@Override
public void insertFill(metaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
// 更新操作处理
@Override
public void updateFill(metaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
7.乐观锁
首先在实体类中 锁字段加上注解
然后注册乐观锁组件
@Configuration
public class MybatisConfig {
// mybatis-plus插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件 注意数据库的类型 这里使用的mysql
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// sql 性能规范插件
interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
这里更新历史数据,如果version是后面才加的字段,已有的历史数据如果该字段为null 更新的时候不会添加varsion条件
8.逻辑删除
实体类中逻辑删除字段添加注解@TableLogic
application.properties 添加逻辑删除的配置项
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) mybatis-plus.global-config.db-config.logic-delete-field=deleted # 逻辑已删除值(默认为 1) mybatis-plus.global-config.db-config.logic-delete-value=1 # 逻辑未删除值(默认为 0) mybatis-plus.global-config.db-config.logic-not-delete-value=0
上面的配置中 如果未删除是0 已删除是1 则可只配置逻辑删除的字段名称即可
官网给的配置就是上面的配置 但是在3.4.0版本中 我并没有在application.properties中添加上面的配置,实际删除的时候 依然会走逻辑删除 大胆猜测一下,估计只要实体类配置了tablelogic注解就会生效把



