当前位置: 首页 > news >正文

MyBatis-Plus通用枚举

MyBatis-Plus通用枚举

  • MyBatis-Plus通用枚举是什么
  • 示例详解

MyBatis-Plus通用枚举是什么

MyBatis-Plus 通用枚举是基于 MyBatis 的类型处理器 TypeHandler 扩展实现的标准化、通用化枚举适配方案,核心定位是解决代码层枚举语义化与数据库层编码轻量化的映射问题。

它通过注解(@EnumValue)或接口(IEnum)约定枚举值与数据库存储编码的映射规则,结合枚举包扫描机制,实现枚举类型与数据库字段编码的无侵入式自动化双向转换,无需开发者编写手动转换逻辑,且一套规则可统一适配所有符合约定的枚举类。

示例详解

下面通过示例对MyBatis-Plus通用枚举的执行流程进行详细介绍

数据库表添加字段sex

创建通用枚举类型
用 @EnumValue 标注数据库存储的枚举编码字段

@GetterpublicenumSexEnum{MALE(1,"男"),FEMALE(2,"女");@EnumValueprivateIntegersex;// 核心字段privateStringsexName;// 业务描述字段SexEnum(Integersex,StringsexName){this.sex=sex;this.sexName=sexName;}}

MyBatis-Plus 通用枚举类的核心构成要素如下:
首先需通过 @Getter 注解(或手动编写)为所有私有字段提供 Getter 方法,满足 MP 反射获取字段值的基础要求;其次必须定义由 @EnumValue 注解标注的数据库映射核心字段,该字段是 MP 实现枚举和数据库编码双向转换的唯一依据,写库时反射获取其编码值写入数据库,读库时依据编码值反向匹配枚举项;可写业务描述字段(非 MP 强制要求,可提升枚举的业务语义可读性);此外需声明具体枚举项,每个枚举项对应一组数据库编码值和业务描述值,枚举项将抽象的业务状态转化为代码中语义明确、可直接引用的实例;最后通过私有构造器完成核心字段与业务描述字段的初始化。

在 MyBatis-Plus 早期版本中,实现通用枚举的主流方式是让枚举类实现 IEnum 接口,且需指定接口泛型(泛型类型与数据库编码字段类型一致),并强制重写 getValue() 方法,下面是具体代码

@GetterpublicenumSexEnum1implementsIEnum<Integer>{MALE(1,"男"),FEMALE(2,"女");privateIntegersex;privateStringsexName;SexEnum1(Integersex,StringsexName){this.sex=sex;this.sexName=sexName;}@OverridepublicIntegergetValue(){returnthis.sex;}}

新版仍兼容该方式,若枚举同时标注 @EnumValue 和实现 IEnum 接口,@EnumValue 的优先级更高

实体类

@Data@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateLongid;privateStringname;privateIntegerage;privateStringemail;// 枚举privateSexEnumsex;}

实体类中的 sex 属性无需定义为数据库存储的编码类型,可直接声明为自定义的通用枚举类型,MyBatis-Plus 框架会自动完成枚举类型与数据库编码之间的双向转换

type-enums-package 是 MyBatis-Plus 配置文件中用于指定通用枚举类扫描包路径的配置项。MP 启动阶段会扫描该路径下所有符合通用枚举规范的枚举类,一方面自动识别枚举类中基于@EnumValue / IEnum 定义的映射规则,另一方面为这些枚举类自动绑定内置的 MybatisEnumTypeHandler 类型处理器,而 MybatisEnumTypeHandler 作为核心组件,支撑了通用枚举与数据库编码之间的自动双向转换能力。

测试代码

@AutowiredprivateUserMapperuserMapper;@TestpublicvoidtestSexEnum(){Useruser=newUser();user.setName("Enum");user.setAge(20);user.setEmail("test@enum.com");user.setSex(SexEnum.MALE);userMapper.insert(user);System.out.println(user.getSex());// 获取枚举实例System.out.println(user.getSex().getSex());// 获取数据库存储的编码值System.out.println(user.getSex().getSexName());// 获取业务描述}

执行user.setSex(SexEnum.MALE);MP 会通过 MybatisEnumTypeHandler 自动将枚举项 SexEnum.MALE 转换为其 @EnumValue 标注的编码值 1 写入数据库。

user.getSex() 获取 SexEnum.MALE 枚举实例
user.getSex().getSex() 获取数据库存储的编码值
user.getSex().getSexName() 获取业务描述

执行结果如图:


http://www.cnnetsun.cn/news/11506.html

相关文章:

  • 大数据爬虫可视化一线城市二手房价格分析预测系统的设计与分析
  • DREAMVFIA WebScraper SDK - 企业级Web抓取开发套件项目开源完整代码数据包
  • IpaDownloadTool:iOS应用分发的终极解决方案
  • YimMenu DLL注入终极指南:从零基础到精通掌握
  • GEO 优化是新概念割韭菜,还是 AI 搜索时代的必修课?——从“概念辨析”到“实战范围”的完整拆解
  • 网盘直链解析工具:解锁高速下载新体验
  • 大模型预训练与微调全攻略,从“通才“到“专家“的技术蜕变
  • Java全栈工程师面试实录:从技术细节到项目实战
  • 如何高效下载百度网盘资源:pan-baidu-download完整使用指南
  • GEO优化(生成式引擎搜索)
  • Blender 3MF插件:从入门到精通的场景化指南
  • 揭秘VSCode远程调试量子计算应用:5个你必须知道的关键步骤
  • AI元人文构想:为价值安家,让优化有度
  • Wan2.2-T2V-A14B如何确保生成人物不出现畸形肢体
  • Wan2.2-T2V-A14B模型的显存占用与批量生成策略
  • Blender与虚幻引擎的无缝桥梁:解密PSK/PSA插件核心技术
  • AMD Ryzen处理器高级调试实战:SMUDebugTool深度配置指南
  • Wan2.2-T2V-A14B与传统AE模板相比的优势与局限
  • BepInEx插件框架完整指南:从安装到精通Unity游戏模组开发
  • Wan2.2-T2V-A14B模型对国产操作系统(如统信UOS)的适配进展
  • 3DM文件导入Blender的终极解决方案:import_3dm插件完整指南
  • 回忆杀,极空间上部署『开源奇迹』游戏服务器,一键开服自己当GM
  • 终极解决方案:微信网页版快速上手指南
  • N_m3u8DL-CLI-SimpleG终极自动化视频下载手册
  • 靠谱的航天级SSD固态硬盘哪个好
  • 基于Java Swing的拼图小游戏(2)
  • 【量子计算开发者必藏】:VSCode硬件对接配置的7个关键陷阱与规避方法
  • Wan2.2-T2V-A14B在文旅宣传视频批量生成中的落地实践
  • VSCode与Azure QDK联合调试深度解析,解锁量子编程高阶能力
  • 2025企业微信私域必开功能:会话存档的价值与实操指南