SpringBoot ---- Mybatis Plus 插件
自动填充
注解实体字段
public class User {
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
自定义实现类
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
//this.setFieldValByName("operator", "Jerry", metaObject);
//this.setInsertFieldValByName("operator", "Jerry", metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
//this.setFieldValByName("operator", "Tom", metaObject);
//this.setUpdateFieldValByName("operator", "Tom", metaObject);
}
}
乐观锁插件
需要数据库表中加入
version
字段
注解实体字段 @Version
@Version
private Integer version
编写配置类
@Configuration
@MapperScan("") // 可以写在这里或者启动类上面
public class MybatisPlusConfig {
// 乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
分页插件
编写配置类
@Configuration
@MapperScan("") // 可以写在这里或者启动类上面
public class MybatisPlusConfig {
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
// paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
分页查询
public Test{
@Test
void testPage() {
// 创建 Page 对象,传入 当前页 和 每页记录数
Page<User> page = new Page<>(1,5);
// 分页查询
userMapper.selectPage(page, null);
/**
* 分页数据
* page.getCurrent() ---- 当前页
* page.getPages() ---- 总页数
* page.getSize() ---- 每页记录数
* page.getTotal() ---- 总记录数
* page.getRecords() ---- List 集合
* page.hasNext() ---- 下一页
* page.hasPrevious() ---- 上一页
*/
}
}
逻辑删除
需要在数据可添加
deleted
字段
注解实体字段 @TableLogic
@TableLogic
private Integer deleted;
编写配置类
3.1.1开始不再需要这一步
//
@Configuration
public class MyBatisPlusConfiguration {
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
性能分析插件
编写配置类
仅推荐开发使用,线上不推荐
@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {
/**
* SQL执行效率插件
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
// 使用默认配置
// return new PerformanceInterceptor();
// 自定义配置
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100);// 单位:ms,超过则不执行
performanceInterceptor.setFormat(true); // SQL 格式化
return performanceInterceptor;
}
}
设置 dev 环境
可以针对各环境新建不同的配置文件
application-dev.properties
、application-test.properties
、application-prod.properties
#环境设置:dev、test、prod
spring.profiles.active=dev
条件构造器
详情参考官方文档