告别手动创建:用MyBatis-Flex APT实现Entity到Mapper的‘无感’生成(含后缀过滤技巧)

张开发
2026/4/8 22:40:41 15 分钟阅读

分享文章

告别手动创建:用MyBatis-Flex APT实现Entity到Mapper的‘无感’生成(含后缀过滤技巧)
告别手动创建用MyBatis-Flex APT实现Entity到Mapper的‘无感’生成含后缀过滤技巧在团队协作开发中保持代码规范与自动化流程的平衡是每个技术负责人必须面对的挑战。想象这样一个场景你的团队规定所有实体类必须统一添加Entity后缀以明确其职责但随之而来的是生成的Mapper和TableDef类名变得冗长——AccountEntityMapper这样的命名既不符合简洁原则又增加了代码阅读的负担。这正是MyBatis-Flex APT的ignoreEntitySuffixes配置要解决的痛点。1. MyBatis-Flex APT的核心价值传统MyBatis开发中即使使用MyBatis Generator等工具开发者仍需维护大量重复的Mapper接口和XML文件。这种模式存在两个显著问题代码冗余每个实体类对应一个几乎雷同的Mapper接口维护成本当实体类字段变更时需要同步修改多个文件MyBatis-Flex APT通过编译时代码生成技术实现了真正的约定优于配置。其工作原理可分为三个关键阶段// 编译前源代码 Table(tb_account) public class AccountEntity { Id(keyType KeyType.Auto) private Long id; private String userName; // 其他字段... } // 编译后生成的代码结构 ├── entity │ └── AccountEntity.java ├── mapper │ └── AccountMapper.java // 自动生成 └── table └── AccountTableDef.java // 自动生成技术对比方案代码侵入性实时性学习成本团队适配性传统MyBatis高差中低MyBatis Plus中良低高MyBatis-Flex APT低优秀中极高提示APT生成的代码会直接进入target/generated-sources目录大多数IDE会自动将其加入源码路径无需额外配置。2. 后缀过滤的工程化实践在大型项目中实体类命名往往需要遵循严格的规范。假设我们采用Entity作为统一后缀通过配置mybatis-flex.config文件可以实现生成类的自动净化# 支持多个后缀用逗号分隔 processor.tableDef.ignoreEntitySuffixesEntity,Model,DTO processor.mapper.generateEnabletrue配置效果对比配置前实体类AccountEntity.java生成MapperAccountEntityMapper.java生成TableDefAccountEntityTableDef.java配置后实体类AccountEntity.java生成MapperAccountMapper.java生成TableDefAccountTableDef.java这种处理方式特别适合以下场景多模块项目基础模块定义UserDTO持久化模块需要生成UserMapperDDD架构领域层使用OrderAggregate基础设施层需要干净的OrderMapper历史项目改造已有大量*Model命名的老代码需要接入新框架3. 高级配置与疑难处理实际项目中可能会遇到一些特殊情况需要通过组合配置来解决多数据源场景processor.mapper.packagecom.company.project.{module}.mapper processor.tableDef.packagecom.company.project.{module}.table自定义生成策略Table(value sys_user, mapperGenerateEnable false) public class UserEntity { // 显式禁用当前实体的Mapper生成 }常见问题解决方案生成代码未生效检查IDE是否开启了注解处理执行mvn clean compile强制重新生成确认配置文件名称为mybatis-flex.config且位置正确Lombok兼容问题!-- 保证编译顺序 -- dependencies dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency dependency groupIdcom.mybatis-flex/groupId artifactIdmybatis-flex-processor/artifactId version${flex.version}/version scopeprovided/scope /dependency /dependencies4. 性能优化与最佳实践在超大型项目500实体类中APT处理可能会影响编译速度。通过以下策略可以显著提升体验增量编译配置# 开启增量处理模式 processor.incrementaltrue # 跳过未变更的实体 processor.skipUnmodifiedtrue团队规范建议统一在父pom中管理APT版本将mybatis-flex.config放入resources根目录代码审查时检查自动生成类的使用方式为特殊场景保留手动Mapper的扩展能力// 自定义Mapper示例 public interface CustomAccountMapper extends AccountMapper { Select(SELECT * FROM tb_account WHERE age #{minAge}) ListAccountEntity selectByMinAge(int minAge); }经过多个企业级项目验证合理配置的MyBatis-Flex APT方案能使持久层代码量减少60%以上同时显著降低因手动操作导致的错误率。特别是在微服务架构下当需要快速调整数据模型时这种自动化优势会更加明显。

更多文章