MyBatis-Plus 高级用法:10 个提升开发效率的技巧
MyBatis-Plus Advanced Tips: 10 Techniques to Boost Development Efficiency
| iDev Team | 2026-08-11T10:00:00
MyBatis-Plus 是 Java 开发中最流行的 ORM 框架之一,但很多开发者只用到了基础功能。本文分享 10 个高级用法,帮你写出更简洁高效的代码。
MyBatis-Plus is one of the most popular ORM frameworks in Java development, but many developers only use basic features. This article shares 10 advanced techniques to help you write cleaner and more efficient code.
1. 自动填充(MetaObjectHandler)创建和更新时间自动填充,无需手动 set:@Component public class MyMetaHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject meta) { strictInsertFill(meta, "createdAt", LocalDateTime::now, LocalDateTime.class); strictInsertFill(meta, "updatedAt", LocalDateTime::now, LocalDateTime.class); } @Override public void updateFill(MetaObject meta) { strictUpdateFill(meta, "updatedAt", LocalDateTime::now, LocalDateTime.class); } }2. 逻辑删除在 application.yml 中配置一次,全局生效:mybatis-plus: global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 03. 乐观锁插件使用 @Version 注解实现并发安全的更新操作。4. Lambda 链式查询List<News> list = lambdaQuery() .like(News::getTitle, keyword) .eq(News::getStatus, 1) .orderByDesc(News::getCreatedAt) .last("LIMIT 10") .list();5. 自定义 SQL 注入器批量插入 insertBatchSomeColumn 比循环 insert 快 10 倍以上。6. 多数据源支持配合 dynamic-datasource-spring-boot-starter,通过 @DS 注解即可切换数据源。7. 枚举处理器使用 @EnumValue 自动映射数据库值与 Java 枚举。8. JSON 字段处理@TableField(typeHandler = JacksonTypeHandler.class) 自动序列化 JSON 字段。9. 分页拦截器优化配置 maxLimit 防止全表扫描,设置 optimizeJoin 优化关联查询。10. SQL 性能分析插件开发环境启用 SQL 性能分析,自动检测慢查询并打印完整 SQL。
1. Auto-Fill (MetaObjectHandler)Automatically fill creation and update timestamps without manual setting:@Component public class MyMetaHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject meta) { strictInsertFill(meta, "createdAt", LocalDateTime::now, LocalDateTime.class); strictInsertFill(meta, "updatedAt", LocalDateTime::now, LocalDateTime.class); } @Override public void updateFill(MetaObject meta) { strictUpdateFill(meta, "updatedAt", LocalDateTime::now, LocalDateTime.class); } }2. Logical DeleteConfigure once in application.yml for global effect:mybatis-plus: global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 03. Optimistic Lock PluginUse the @Version annotation for concurrency-safe update operations.4. Lambda Chain QueriesList<News> list = lambdaQuery() .like(News::getTitle, keyword) .eq(News::getStatus, 1) .orderByDesc(News::getCreatedAt) .last("LIMIT 10") .list();5. Custom SQL InjectorBatch insert with insertBatchSomeColumn is 10x faster than loop insert.6. Multi-DataSource SupportWith dynamic-datasource-spring-boot-starter, switch data sources using the @DS annotation.7. Enum HandlerUse @EnumValue for automatic mapping between database values and Java enums.8. JSON Field Handling@TableField(typeHandler = JacksonTypeHandler.class) auto-serializes JSON fields.9. Pagination Interceptor OptimizationConfigure maxLimit to prevent full table scans and set optimizeJoin for join query optimization.10. SQL Performance Analysis PluginEnable SQL performance analysis in development to auto-detect slow queries and print complete SQL statements.