Skip to content

MyBatis-Plus ​

系统持久层框架使用MyBatis-Plus(3.5.17 boot4 starter,模块名 lihua-base-mybatis),此模块为对MP的配置,详细用法参考 官方文档。

基础类 ​

BaseEntity ​

带有 createId 、 createTime 、 updateId 、 updateTime 、 delFlag 的业务类可继承此类。继承后上述默认字段无需在业务中赋值,使用MyBatisPlus执行对应的新增、修改操作时会自动赋值。

BaseDTO ​

封装了带有分页参数的类,一般业务分页DTO继承此类。内置 MaxPageSizeLimit 校验组:pageNum/pageSize 超过上限(MAX_PAGE_SIZE = 100)时经 validation 拦截,防止大分页请求拖垮数据库,详细用法参考 数据模型

SortUtils ​

同级排序归一化工具,将同组内记录重编为 1..N 的连续序号,配合 SortEntity 接口使用,详细用法参考 Service开发

配置 ​

配置文件 ​

lihua-admin 下 application.yml 配置文件可对MyBatis-Plus进行配置,当前项目xml文件在 mapper 层的 xml 目录下维护。

mybatis-plus:
  global-config:
    db-config:
      # 逻辑删除对应字段
      logic-delete-field: delFlag
      # 逻辑删除后的字段对应值
      logic-delete-value: 1
      # 逻辑删除前的字段对应值
      logic-not-delete-value: 0
  # 将 xml 放到 java 目录下
  mapper-locations: classpath*:com/lihua/**/mapper/**/*.xml

配置类 ​

MybatisPlusConfig 下进行分页插件的配置。

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 如果配置多个插件,切记分页最后添加
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 分页溢出后自动查询第一页
        paginationInnerInterceptor.setOverflow(true);
        // 数据库类型
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

自动填充 ​

仅在 BaseEntity 中设置了自动填充注解,会根据 插入 / 更新 方法进行对 BaseEntity 基础数据的填充。

@Component
public class AutoFillHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        // 创建用户
        if (LoginUserContext.getUserId() != null) {
            this.strictInsertFill(metaObject, "createId", String.class, LoginUserContext.getUserId());
        }
        // 创建时间
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, DateUtils.now());
        // 逻辑删除
        this.strictInsertFill(metaObject, "delFlag", String.class, "0");
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新用户
        if (LoginUserContext.getUserId() != null) {
            this.strictUpdateFill(metaObject, "updateId", String.class, LoginUserContext.getUserId());
        }
        // 更新时间
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, DateUtils.now());
    }
}