1. MyBatis-plus核心拓展功能解析
作为Java开发者,MyBatis-plus已经成为我们日常开发中不可或缺的ORM框架。它不仅简化了MyBatis的基础操作,还提供了许多强大的拓展功能。今天我将结合自己多年的实战经验,详细解析MyBatis-plus的几个核心拓展功能,包括逻辑删除、通用枚举、字段类型处理器等,并分享一些实际项目中积累的实用技巧。
1.1 逻辑删除的优雅实现
逻辑删除是业务系统中常见的需求,它通过标记状态来"软删除"数据,而非物理删除。MyBatis-plus提供了两种实现方式:
注解方式是最直接的实现:
java复制@TableLogic(value = "1", delval = "0")
private Integer status;
这里value表示未删除状态的值,delval表示删除状态的值。这种方式的优势是灵活,可以针对不同表使用不同的逻辑删除字段和值。
全局配置方式则更适合统一规范的项目:
yaml复制mybatis-plus:
global-config:
db-config:
logic-delete-field: status # 全局逻辑删除字段名
logic-delete-value: 0 # 删除值
logic-not-delete-value: 1 # 未删除值
实际项目中建议:开发环境使用注解方式方便调试,生产环境使用全局配置保持统一。同时要注意,逻辑删除字段最好建立索引以提高查询效率。
逻辑删除的实现原理是MyBatis-plus在SQL解析阶段自动添加条件。例如查询时会自动加上WHERE status=1,删除操作则会变为UPDATE语句。这种设计既保持了数据完整性,又简化了开发。
1.2 通用枚举的优雅映射
枚举类型是Java中表示固定值集合的最佳实践。MyBatis-plus通过@EnumValue注解实现了枚举与数据库值的优雅映射:
java复制public enum GenderEnum {
MAN(1,"男"),WOMAN(0,"女");
@EnumValue // 标记此字段值存入数据库
private Integer gender;
private String genderName;
GenderEnum(Integer gender, String genderName) {
this.gender = gender;
this.genderName = genderName;
}
}
使用时只需在实体类中直接使用枚举类型:
java复制private GenderEnum gender;
MyBatis-plus会自动完成类型转换。这种方式相比直接使用基本类型有以下优势:
- 类型安全,避免无效值
- 代码可读性高
- 业务含义明确
经验分享:枚举的数据库存储值最好使用整数而非字符串,既能节省空间又能提高查询效率。同时建议为枚举添加描述字段,便于前端展示。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高级类型处理与自动填充
2.1 字段类型处理器的灵活应用
在实际项目中,我们经常遇到Java对象与数据库存储格式不一致的情况。例如前端传递的Map需要以JSON格式存储到数据库。MyBatis-plus的字段类型处理器完美解决
