通用枚举

解决了繁琐的配置,让 mybatis 优雅的使用枚举属性!

3.1.0开始,如果你无需使用原生枚举,可配置默认枚举来省略扫描通用枚举配置 默认枚举配置

  • 升级说明:

    3.1.0 以下版本改变了原生默认行为,升级时请将默认枚举设置为EnumOrdinalTypeHandler

  • 影响用户:

    实体中使用原生枚举

  • 其他说明:

    配置枚举包扫描的时候能提前注册使用注解枚举的缓存

1、声明通用枚举属性

方式一: 使用 @EnumValue 注解枚举属性 完整示例通用枚举 - 图1

  1. public enum GradeEnum {
  2. PRIMARY(1, "小学"), SECONDORY(2, "中学"), HIGH(3, "高中");
  3. GradeEnum(int code, String descp) {
  4. this.code = code;
  5. this.descp = descp;
  6. }
  7. @EnumValue//标记数据库存的值是code
  8. private final int code;
  9. //。。。
  10. }

方式二: 枚举属性,实现 IEnum 接口如下:

  1. public enum AgeEnum implements IEnum<Integer> {
  2. ONE(1, "一岁"),
  3. TWO(2, "二岁"),
  4. THREE(3, "三岁");
  5. private int value;
  6. private String desc;
  7. @Override
  8. public Integer getValue() {
  9. return this.value;
  10. }
  11. }

实体属性使用枚举类型

  1. public class User {
  2. /**
  3. * 名字
  4. * 数据库字段: name varchar(20)
  5. */
  6. private String name;
  7. /**
  8. * 年龄,IEnum接口的枚举处理
  9. * 数据库字段:age INT(3)
  10. */
  11. private AgeEnum age;
  12. /**
  13. * 年级,原生枚举(带{@link com.baomidou.mybatisplus.annotation.EnumValue}):
  14. * 数据库字段:grade INT(2)
  15. */
  16. private GradeEnum grade;
  17. }

2、配置扫描通用枚举

  • 注意!! spring mvc 配置参考,安装集成 MybatisSqlSessionFactoryBean 枚举包扫描,spring boot 例子配置如下:

示例工程:

👉 mybatisplus-spring-boot通用枚举 - 图2

配置文件 resources/application.yml

  1. mybatis-plus:
  2. # 支持统配符 * 或者 ; 分割
  3. typeEnumsPackage: com.baomidou.springboot.entity.enums
  4. ....

如何序列化枚举值为数据库存储值?

Jackson

一、重写toString方法

springboot

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

jackson

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

以上两种方式任选其一,然后在枚举中复写toString方法即可.

二、注解处理

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

Fastjson

一、重写toString方法

全局处理方式

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

局部处理方式

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

以上两种方式任选其一,然后在枚举中复写toString方法即可.