• 通用枚举
  • 1、申明通用枚举属性
  • 2、配置扫描通用枚举
  • 3、JSON序列化处理
    • 一、Jackson
    • 二、Fastjson

    通用枚举

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

    3.1.0开始,可配置默认枚举处理类来省略扫描通用枚举配置 默认枚举配置

    • 升级说明:

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

    • 影响用户:

      实体中使用原生枚举

    • 其他说明:

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

    • 推荐配置:

      • 使用实现IEnum接口
        • 推荐配置defaultEnumTypeHandler
      • 使用注解枚举处理
        • 推荐配置typeEnumsPackage
      • 注解枚举处理与IEnum接口
        • 推荐配置typeEnumsPackage
      • 与原生枚举混用
        • 需配置defaultEnumTypeHandlertypeEnumsPackage

    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. ....

    3、JSON序列化处理

    一、Jackson

    1. 1.在需要响应描述字段的get方法上添加@JsonValue注解即可

    二、Fastjson

    1.全局处理方式

    1. FastJsonConfig config = new FastJsonConfig();
    2. //设置WriteEnumUsingToString
    3. config.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString);
    4. converter.setFastJsonConfig(config);

    2.局部处理方式

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

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

    3.JavaBean方式序列化枚举 ,无需重写toString方法

    1. @JSONType(serializeEnumAsJavaBean = true)
    2. public enum GradeEnum {