1. MyBatisPlus核心注解全景解析作为MyBatis的增强工具MyBatisPlus通过注解机制极大简化了ORM层开发。这些注解主要分为三类表结构映射注解、字段行为控制注解和特殊功能注解。下面我们通过典型电商系统的用户模块来演示这些注解的实际应用场景。1.1 表结构映射注解组TableName是实体类与数据库表建立映射的基石注解。在用户中心系统中我们通常会遇到表名与实体类名不一致的情况TableName(value t_member, schema user_center) public class Member { // 类字段定义 }关键细节当系统采用分库分表设计时schema属性特别重要。比如用户数据按区域分库存储华北地区的用户数据存在user_center_hb库中此时就需要动态设置schema。TableId主键注解支持多种生成策略电商系统常用的有TableId(value member_id, type IdType.ASSIGN_ID) private Long id;主键策略对比策略类型适用场景特点ASSIGN_ID分布式系统雪花算法生成19位数字ASSIGN_UUID需要字符串ID32位UUID字符串INPUT有业务意义的ID如订单编号SO202312011.2 字段行为控制注解组TableField是使用频率最高的字段级注解其丰富属性可以应对各种业务场景// 敏感字段脱敏处理 TableField(value id_card, select false) private String idCard; // 自动填充创建时间 TableField(fill FieldFill.INSERT) private LocalDateTime createTime; // 动态查询条件 TableField(condition SqlCondition.LIKE) private String username;字段策略的坑点记录当使用FieldStrategy.NOT_EMPTY时注意数字0会被视为空值自动填充需要实现MetaObjectHandler接口condition属性在动态查询时性能优于XML配置1.3 特殊功能注解组Version实现乐观锁控制库存// 商品库存版本控制 Version private Integer version;TableLogic实现逻辑删除会员数据TableLogic(value 0, delval 1) private Integer deleted;重要提示逻辑删除字段需要全局配置逻辑未删除值否则自定义查询需要手动过滤已删除数据。2. 注解深度应用实战技巧2.1 多租户系统注解配置在SAAS系统中多租户隔离是基本需求。通过注解组合实现TableName(t_order) KeySequence(value seq_order, dbType DbType.ORACLE) public class Order { TableId(type IdType.INPUT) private String orderNo; TableField(tenantId true) private String tenantId; }租户字段处理要点需要配置TenantLineInnerInterceptor插件排除不需要隔离的表使用InterceptorIgnore分布式ID生成要考虑租户前缀2.2 枚举类型优雅处理用户状态枚举的数据库存储方案public enum UserStatus { EnumValue(A) ACTIVE(A), EnumValue(F) FROZEN(F); private String code; // 构造方法等 } // 实体类中使用 private UserStatus status;枚举处理的最佳实践数据库存code值而非枚举名实现IEnum接口可获得更好序列化支持配合Mybatis的typeHandler实现自定义转换3. 生产环境避坑指南3.1 注解失效常见场景Lombok冲突问题Data会覆盖TableField配置解决方案改用Getter/Setter单独注解继承场景下的注解继承父类注解不会被自动继承需要子类重新声明或使用Inherited动态表名不生效TableName是静态配置需要配合动态表名插件使用3.2 性能优化建议避免过度使用autoResultMap会增加元数据解析开销明确指定需要处理的字段谨慎使用selectfalse会导致N1查询问题建议用DTO做字段过滤批量操作禁用乐观锁批量更新时去掉Version字段使用updateBatchById替代4. 高级特性组合应用4.1 审计日志注解方案结合自动填充实现操作日志public class BaseEntity { TableField(fill FieldFill.INSERT) private String createBy; TableField(fill FieldFill.UPDATE) private String updateBy; }实现MetaObjectHandlerpublic class AuditHandler implements MetaObjectHandler { Override public void insertFill(MetaObject metaObject) { this.setFieldValByName(createBy, getCurrentUser(), metaObject); } }4.2 多数据源注解策略不同模块使用不同数据源TableName(value t_product, schema product_db) public class Product { // 商品模块字段 } TableName(value t_order, schema order_db) public class Order { // 订单模块字段 }配置要点需要配置DynamicDataSource事务注解要指定数据源分库字段需要特殊处理5. 自定义注解扩展实现字段加密注解Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) public interface FieldEncrypt { String algorithm() default AES; } // 使用自定义注解 FieldEncrypt private String mobile;配套实现实现TypeHandler处理加解密注册到Mybatis配置中注意加解密性能影响通过深度掌握这些注解特性可以大幅提升持久层开发效率。在实际项目中建议建立注解使用规范避免滥用导致的维护问题。对于复杂场景合理组合注解功能往往比自定义XML更优雅高效。