MyBatisPlus常用配置有哪些?第三篇你都看了吗?

MyBatisPlus常用配置深度解析:第三篇核心技巧全掌握

如果你已经看过前两篇MyBatisPlus实战指南,那么恭喜你完成了ORM框架的筑基修炼!本篇将带你直击开发中最核心的配置实战,从全局参数到CRUD策略,从分页插件到逻辑删除,那些文档里不会告诉你的最佳实践都在这里。准备好解锁MyBatisPlus的完整战力了吗?

一、全局配置:框架运转的神经中枢

1.1 核心参数配置

@Configuration
public class MybatisPlusConfig {
    
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig config = new GlobalConfig()
            .setBanner(false) // 关闭启动Banner
            .setDbConfig(new GlobalConfig.DbConfig()
                .setColumnFormat("`%s`")  // 字段自动转义
                .setTablePrefix("tbl_")    // 统一表前缀
            );
        return config;
    }
}

关键配置解析:

  • tablePrefix:动态表名前缀,完美支持分表场景
  • columnFormat:字段格式化,防止SQL保留字冲突
  • idType:全局ID生成策略(推荐ASSIGN_ID)

1.2 SQL执行监控

启用性能分析插件拦截慢查询:

<property name="configuration">
  <bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="plugins">
      <array>
        <bean class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor">
          <property name="maxTime" value="1000"/>
          <property name="format" value="true"/>
        </bean>
      </array>
    </property>
  </bean>
</property>

二、CRUD策略配置:让基础操作更智能

2.1 字段自动填充

实现MetaObjectHandler处理审计字段:

public class AutoFillHandler implements MetaObjectHandler {
    
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

2.2 逻辑删除实战

配置逻辑删除与数据恢复方案:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted   逻辑删除字段
      logic-not-delete-value: 0     未删除值
      logic-delete-value: 1         删除值

注意事项:

  • 需在实体字段添加@TableLogic注解
  • 查询条件自动过滤已删除数据
  • 支持deleteById物理删除(需特殊处理)

三、高阶插件配置:解锁企业级功能

3.1 分页插件深度优化

@Bean
public MybatisPlusInterceptor paginationInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    PaginationInnerInterceptor pagination = new PaginationInnerInterceptor();
    pagination.setOptimizeJoin(true);  // 优化关联查询
    pagination.setMaxLimit(1000L);     // 单页最大记录数
    interceptor.addInnerInterceptor(pagination);
    return interceptor;
}

3.2 多租户方案实现

通过TenantLineInnerInterceptor实现数据隔离:

public class TenantInterceptor extends TenantLineInnerInterceptor {
    
    public TenantInterceptor(String tenantIdColumn) {
        this.setTenantLineHandler(new TenantLineHandler() {
            @Override
            public Expression getTenantId() {
                return new StringValue(RequestContext.getTenantId());
            }
            
            @Override
            public boolean ignoreTable(String tableName) {
                return !"user".equals(tableName); // 指定需要过滤的表
            }
        });
    }
}

四、生产环境最佳实践

4.1 配置优先级管理

  1. 注解配置 > XML配置 > YAML配置
  2. 局部配置覆盖全局配置
  3. 测试环境开启SQL日志,生产环境关闭

4.2 性能调优参数

  • mapper-locations:指定XML路径减少扫描耗时
  • default-enum-type-handler:枚举转换优化
  • aggressive-lazy-loading:延迟加载策略

最后提醒:记得结合第二篇的注解使用技巧,配置与注解双剑合璧才能真正发挥MyBatisPlus的全部威力。现在就去检查你的项目配置,让这些最佳实践为你的系统保驾护航!