一、java枚举类编写
OperTypeCode.java
OperateTypeEnum.java
直接的查看枚举对象和写入数据库
查看枚举对象直接toString输出:
把枚举对象通过jpa写入数据库:
说明:
1,枚举对象的toString为该枚举的名称;
2,枚举对象直接存储,就会保存该枚举的ORDINAL(可以理解成顺序号)。
二、前端展示(json格式化)
这里默认为jackson。
OperateTypeEnum.java
在Enum枚举对象上添加了
已经在枚举属性上添加了
前面按个接车短驳,是因为枚举对象名称就叫这个,后面这个接车短驳AAA,是因为又jsonValue这个注解,所以jackson格式化json时候就取他。
三、后端存储(存储到数据库)
这里默认先为jpa。
本章节介绍开发Spring Boot应用时使用JPA处理枚举类型持久化的三种方法:
一、使用 @Enumerated(EnumType.ORDINAL) 注解
使用 @Enumerated(EnumType.ORDINAL) 注解,存储枚举类型实例的定义顺序(从0开始递增),这也是JPA处理枚举类型的默认行为;
二、使用 @Enumerated(EnumType.STRING) 注解
使用 @Enumerated(EnumType.STRING) 注解,存储枚举类型实例的 name 属性,即 name() 方法返回值;
三、自定义实现 jakarta.persistence.AttributeConverter 接口的转换类
自定义实现 jakarta.persistence.AttributeConverter 接口的转换类:
convertToDatabaseColumn 方法将枚举转换成存储到数据库中的数据;
convertToEntityAttribute 方法将从数据库中查询到的数据转换成枚举。
在jpa的entity中添加了@Enumerated(EnumType.STRING)注解,就会使用枚举的name。即
特别注明:
在枚举中有个String字符串的code可以他可以和枚举名字对应。这样,保存时可以使用@Enumerated(EnumType.STRING)注解保存了注解的name。还可以再code属性上添加@jsonValue注解,这样在转成json时也是code他又和名字一一对应,我个人觉得算比较好的一种。
利用第三种情况编写代码如下:
创建converter包;
创建OperTypeCodeConverter转换类。
OperTypeCodeConverter.java
在枚举类型属性上添加@Convert注解指定为我们自定义的注解类型。
四、如果是mybatis。
MyBatis 可以映射 Java 枚举类型(Enum)。在 MyBatis 中,枚举类型的默认处理方式是通过 EnumTypeHandler
将枚举值转换为其名称进行存储。这意味着当一个枚举类型的字段被持久化到数据库时,默认情况下它会被保存为枚举名称。
如果你需要自定义枚举类型的处理方式,比如按照枚举的序号(ordinal)或者自定义的属性来存储和读取,你可以编写自定义的 TypeHandler
来实现这些功能:
- EnumOrdinalTypeHandler:MyBatis 提供了内置的
EnumOrdinalTypeHandler
,该处理器会将枚举的序号(从0开始的索引)与数据库中的数字字段进行映射。 - 自定义 TypeHandler:创建自己的
TypeHandler
实现类,指定如何将枚举类型与数据库中的特定类型(如 VARCHAR 或 INT)相互转换。
在映射文件中,你可以在 <resultMap>
或者 <parameterType>
的 <typeHandler>
标签下指定使用哪个枚举处理器,或者在全局配置中注册自定义的 TypeHandler
,使其对所有相应类型的枚举字段生效。
在MyBatis中支持枚举类型有两种常用的方法:
- 使用TypeHandler:自定义一个TypeHandler来处理枚举类型,实现TypeHandler接口,重写其方法,将枚举类型转换为数据库存储的类型和从数据库读取的类型转换为枚举类型。
示例代码如下:
在MyBatis的配置文件中注册TypeHandler:
- 使用EnumTypeHandler:MyBatis已经内置了EnumTypeHandler,可以直接使用该TypeHandler来处理枚举类型。
示例配置如下:
以上是两种常用的方法来支持枚举类型在MyBatis中的使用,可以根据实际情况选择适合自己的方法。
五、如果Mybatis-plus。
Mybatis-plus除了上述外,还有一个特别的注解 @EnumValue。
就是数据库需要把枚举那个属性的值存入数据库,就把那个属性加上这个注解即可。