MyBatisPlus常用配置有哪些?第三篇你都看了吗?
- 工作日记
- 2025-06-18
- 48热度
- 0评论
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 配置优先级管理
- 注解配置 > XML配置 > YAML配置
- 局部配置覆盖全局配置
- 测试环境开启SQL日志,生产环境关闭
4.2 性能调优参数
- mapper-locations:指定XML路径减少扫描耗时
- default-enum-type-handler:枚举转换优化
- aggressive-lazy-loading:延迟加载策略
最后提醒:记得结合第二篇的注解使用技巧,配置与注解双剑合璧才能真正发挥MyBatisPlus的全部威力。现在就去检查你的项目配置,让这些最佳实践为你的系统保驾护航!