【第15章】MyBatis-Plus自动映射枚举

文章目录

  • 前言
  • 一、枚举声明
    • 1. 方式一:注解标记
    • 2. 方式二:实现接口
  • 二、未声明枚举
    • 1.修改全局 defaultEnumTypeHandler
  • 三、号外参考: 如何序列化枚举值为前端返回值
    • 1.Jackson
      • 1.1 重写 toString 方法
      • 1.2 注解处理
    • 2.Fastjson
      • 2.1 重写 toString 方法
  • 总结


前言

我们在 mybatisEnumOrdinalTypeHandler(基于枚举常量序号) 和 EnumTypeHandler(基于枚举常量名) 之外
提供了更加灵活的枚举处理器 MybatisEnumTypeHandler(基于枚举常量属性)
只需要对枚举进行声明,即可实现枚举的自动映射
未进行声明的枚举则根据 mybatisdefaultEnumTypeHandler 的默认值EnumTypeHandler 来进行映射

public class User {private String name; // 名字private AgeEnum age; // 年龄private GradeEnum grade; // 年级
}

一、枚举声明

声明该枚举使用 MybatisEnumTypeHandler(基于枚举常量属性) 进行映射

1. 方式一:注解标记

枚举属性使用 @EnumValue 注解,指定枚举值在数据库中存储的实际值。支持枚举类中的任意字段,如序号或编码。

@Getter
@AllArgsConstructor
public enum GradeEnum {PRIMARY(1, "小学"),SECONDARY(2, "中学"),HIGH(3, "高中");@EnumValue // 标记数据库存的值是codeprivate final int code;// 其他属性...
}

2. 方式二:实现接口

实现 IEnum 接口,实现 getValue 方法,指定枚举值在数据库中存储的实际值。支持枚举类中的任意字段,如序号或编码。

@Getter
@AllArgsConstructor
public enum AgeEnum implements IEnum<Integer> {ONE(1, "一岁"),TWO(2, "二岁"),THREE(3, "三岁");private final int value;private final String desc;@Overridepublic Integer getValue() {return this.value;}
}

二、未声明枚举

未声明的枚举将使用 mybatisdefaultEnumTypeHandler 的默认值 EnumTypeHandler 进行映射
可以通过修改全局配置来变更,不过这对上面步骤声明的枚举无效

1.修改全局 defaultEnumTypeHandler

yml 配置文件中配置:

mybatis-plus:configuration:default-enum-type-handler: xx.xx.xx.MyEnumTypeHandler

或者通过自定义配置类:

@Configuration
public class MybatisPlusAutoConfiguration {@Beanpublic MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {return properties -> {GlobalConfig globalConfig = properties.getGlobalConfig();globalConfig.setBanner(false);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setDefaultEnumTypeHandler(MyEnumTypeHandler.class);properties.setConfiguration(configuration);};}
}

三、号外参考: 如何序列化枚举值为前端返回值

1.Jackson

1.1 重写 toString 方法

Spring Boot

@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
}

Jackson 独立使用

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);

在枚举中重写 toString 方法,以上两种方式任选其一。

1.2 注解处理

public enum GradeEnum {PRIMARY(1, "小学"),SECONDORY(2, "中学"),HIGH(3, "高中");GradeEnum(int code, String descp) {this.code = code;this.descp = descp;}@EnumValue@JsonValue // 标记响应json值private final int code;
}

2.Fastjson

2.1 重写 toString 方法

全局处理方式

FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString);

局部处理方式

@JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
private UserStatus status;

在枚举中重写 toString 方法,以上两种方式任选其一。

通过以上步骤,你可以优雅地在 MyBatis-Plus 中使用枚举属性,并且能够方便地将枚举值序列化为前端所需的格式。


总结

回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高级篇】第9章 Elasticsearch 监控与故障排查

9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…

乘用车副水箱浮球式液位计传感器

浮球式液位计概述 浮球式液位计是一种利用浮球在液体中浮动的原理来测量液位的设备&#xff0c;广泛应用于各种工业自动化控制系统中&#xff0c;如石油化工、水处理、食品饮料等行业。它通过浮球的上下运动来测量液位的高低&#xff0c;具有结构简单、安装方便、测量范围广、…

如何选择适合自己的虚拟化技术?

虚拟化技术已成为现代数据中心和云计算环境的核心组成部分。本文将帮助您了解如何选择适合自己需求的虚拟化技术&#xff0c;以实现更高的效率、资源利用率和灵活性。 理解虚拟化技术 首先&#xff0c;让我们了解虚拟化技术的基本概念。虚拟化允许将一个物理服务器划分为多个虚…

百词斩-英语单词大赛

根据您提供的网页内容&#xff0c;以下是一些可能对您有帮助的信息&#xff1a; 1. **比赛名称**&#xff1a; 全国大学生英语单词大赛。 2. **活动平台**&#xff1a; 比赛通过百词斩App进行。 3. **用户基础**&#xff1a; 百词斩App拥有两亿用户&#xff0c;说明这是一个广泛…

HTTP请求中常用的方法

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是客户端&#xff08;如浏览器&#xff09;与服务器之间进行通信的基础。HTTP请求中常用的方法主要包括以下几种&#xff1a; 1. GET 方法 用途&#xff1a;用于从服务器获取资源&#xf…

【Linux】多线程(一万六千字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢&#xff1f; 为什么要有多进程呢&#xff1f; 为…

docker可视化界面portainer

好文转载记录 Docker入门到实践 (九) docker可视化界面portainer的安装与使用_访问 portainer-CSDN博客

Osg中的智能指针和观察指针

目录 1 设计 内容 1 设计 osg中能够使用智能指针的对象都继承自引用计数类Referenced&#xff0c;观察指针(observer_ptr)与智能指针之间通过ObserverSet相互关联&#xff0c;其中obserserver_ptr直接依赖ObeserverSet。 Referenced不直接依赖ObserverSet类&#xff0c;但可…

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中&#xff0c;有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主&#xff0c;我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法&#xff1a;使用&#xff0c; “轻云处理pdf官网” 打开 “轻云处…

Cmake的详细使用

CSDN复制进来的mk笔记很乱 可以看下面的pdf文档 比较清晰 https://download.csdn.net/download/qq_41537499/89512254 Cmake apt install cmake cmake --version cmake version 3.22.1 vim main.cpp main.cpp 代码&#xff1a; #include int main(int argc,char *argv[]) { …

知识图谱知识点总结

知识图谱知识点总结 1. 知识图谱的定义 知识图谱&#xff08;Knowledge Graph&#xff09;是用于描述现实世界中的实体及其关系的图结构&#xff0c;广泛应用于信息检索、自然语言处理、推荐系统等领域。 2. 知识图谱的组成部分 实体&#xff08;Entity&#xff09;: 现实世…

【高中数学/基本不等式】已知:x,y皆大于1,且x+2y=4 求:1/(x-1)+1/(y-1)的最小值为?

【问题来源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 之第一题 【问题】 已知&#xff1a;x,y皆大于1&#xff0c;且x2y4 求&#xff1a;1/(x-1)1/(y-1)的最小值为&#xff1f; 【解答】 解&#xff1a; 若将(x2y)/41代入目标式&…

学习笔记(linux高级编程)11

进程间通信 》信号通信 应用&#xff1a;异步通信。 中断&#xff0c;&#xff0c; 1~64&#xff1b;32应用编程。 如何响应&#xff1a; Term Default action is to terminate the process. Ign Default action is to ignore the signal. wait Core Default action is …

模板类内部能否含有虚函数?

首先&#xff0c;我们要区分模板类虚函数和模板虚函数&#xff0c;话不多说&#xff0c;先上代码&#xff1a; 模板类虚函数 template<class T> class A{ public:virtual ~A(){}virtual void foo(T &t){} };template<class T, class R> class B : public A<…

第一性原理

第一性原理是一个具有深厚哲学根基并广泛应用于多个领域的概念。以下是对其的详细解析&#xff1a; 一、定义 第一性原理&#xff08;the First Principle Thinking&#xff09;指的是从基本要素出发&#xff0c;不依赖于任何假设或经验&#xff0c;通过逻辑推理一步步建立起…

面向对象编程进阶笔记

一、代码重用与继承 在面向对象编程中&#xff0c;代码重用是一个核心概念&#xff0c;通过继承机制可以实现这一点。继承允许子类自动获得父类的所有方法和属性&#xff0c;无需重复编写相同的代码。子类在继承父类的基础上&#xff0c;可以添加自己特有的属性和方法&#xf…

番外篇 | 斯坦福提出即插即用二阶优化器Sophia :相比Adam实现2倍加速,显著节省大语言模型训练成本

前言:Hello大家好,我是小哥谈。大模型的预训练成本巨大,优化算法的改进可以加快模型的训练时间并减少训练开销。目前大模型的训练优化器基本上都采用Adam及其变体,并且Adam的应用已经有9个年头了,在模型优化方面相当于霸主的地位。但是能否够在优化器方面提高模型预训练效…

医院挂号系统:基于JSP和MySQL的现代化医疗预约平台

开头语&#xff1a;您好&#xff0c;我是专注于医疗系统开发的IT学长。如果您对医院挂号系统感兴趣&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术&#xff0c;B/S架构 工具&#xff1a;Eclipse&#xff0c;MyEclips…

中国企业消费管理,驶入“降本”大潮

在足够明晰的成本优化方案之上&#xff0c;能看到除了美团企业版的产品和需求理解能力&#xff0c;更本质的恰在于其最核心的原子能力——即强供应链底座。 这种兼备深度和广度的能力的最终呈现也就是如今美团为企业提供的多元、优质、满足需求的成本考校和计算方案。 作者…

【Python】成功解决TypeError: ‘float‘ object cannot be interpreted as an integer

【Python】成功解决TypeError: ‘float’ object cannot be interpreted as an integer 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主…