news 2026/1/17 6:11:49

MyBatis-Plus通用枚举

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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() 获取业务描述

执行结果如图:


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/8 18:34:34

Wan2.2-T2V-A14B能否生成新能源汽车续航演示动画?技术参数可视化

Wan2.2-T2V-A14B能否生成新能源汽车续航演示动画&#xff1f;技术参数可视化 在智能出行时代&#xff0c;消费者对新能源汽车的关注早已超越“能跑多远”的简单提问&#xff0c;转而追求更立体、动态的理解方式——比如亲眼看到一辆车如何在城市晚高峰中电量缓缓下降&#xff0…

作者头像 李华
网站建设 2026/1/15 7:59:24

百度网盘下载神器:2025年免费极速下载终极指南

百度网盘下载神器&#xff1a;2025年免费极速下载终极指南 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download 还在为百度网盘蜗牛般的下载速度而烦恼吗&#xff1f;面对大文件下载时的无尽等待&am…

作者头像 李华
网站建设 2025/12/30 18:38:10

大数据基于spark的旅游路线推荐系统 爬虫可视化系统

文章目录 项目简介系统截图大数据系统开发流程主要运用技术介绍参考文献结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 项目简介 本系统基于Spark框架构建&#xff0c;主要面向旅游行业提供智能路线推荐服务。系统功能分…

作者头像 李华
网站建设 2025/12/30 20:37:43

Wan2.2-T2V-A14B在短视频平台内容批量生成的应用

Wan2.2-T2V-A14B在短视频平台内容批量生成的应用 如今&#xff0c;打开任何一个主流短视频平台&#xff0c;你几乎看不到“重复”的内容——即便主题相似&#xff0c;每个视频的镜头语言、节奏、视觉风格也各具特色。这种高度差异化的内容生态背后&#xff0c;正悄然发生一场由…

作者头像 李华
网站建设 2025/12/30 18:38:06

Wan2.2-T2V-A14B助力企业构建自动化视频生产流水线

Wan2.2-T2V-A14B助力企业构建自动化视频生产流水线 在数字内容爆炸式增长的今天&#xff0c;品牌对视频的需求早已从“有没有”转向“多不多、快不快、好不好”。一条广告片动辄数周制作周期&#xff0c;成本动辄上万&#xff0c;中小商家望而却步&#xff1b;电商平台每天上新…

作者头像 李华
网站建设 2025/12/30 18:38:03

金仓数据库Oracle模式系统配置详解与实践指南

在做 Oracle → 金仓 KingbaseES 的迁移时&#xff0c;系统参数配置往往决定了两件事&#xff1a; 迁移代码能否“跑起来”&#xff08;兼容性&#xff09;迁移后的业务能否“跑稳、跑快”&#xff08;性能与行为一致性&#xff09; KingbaseES 在 Oracle 模式下提供了一批专门…

作者头像 李华