SpringBoot ---- Mybatis Plus 插件

Posted Jeson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.propertiesapplication-test.propertiesapplication-prod.properties

#环境设置:dev、test、prod
spring.profiles.active=dev

条件构造器

详情参考官方文档

以上是关于SpringBoot ---- Mybatis Plus 插件的主要内容,如果未能解决你的问题,请参考以下文章

springboot02之整合mybatis

SpringBoot——整合SSM(主要整合MyBatis)

SpringBoot集成Mybatis

SpringBoot整合MyBatis

第五章 springboot + mybatis(转载)

springboot实现MyBatis分页