Mybaits-Plus 使用 Enum 枚举类

MyBatisPlus 使用枚举类作为字段类型

1. 使用背景

  • 程序中部分字段想使用 Enum 类型作为 POJO 字段的类型,把 code 存入数据库中,value 通过接口回显到前端页面。传统做法是在代码中手动转换,目前可以使用 MyBatisPlus 中 提供 的 枚举Handler,进行自动转换,实现代码的优美。

2. EnumTypeHandler和EnumOrdinalTypeHandler 比较

  • EnumTypeHandler 是 MyBatisPlus 默认的枚举处理类,如果想切换为 EnumOrdinalTypeHandler 或者自定义 Handler ,可以在如下中进行配置:

    mybatis-plus:
      configuration:
      # 默认枚举处理类
        default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
    
  • EnumTypeHandler 把枚举类的 name 属性存入数据库 ,例如: CC( 1,“抄送人”),会存储 CC 到数据库;

  • EnumOrdinalTypeHandler 使用枚举类的 ordinal 属性存储到数据库,ordinal 属性为 int 类型,例如: CC( 1,“抄送人”),会存储 1 到数据库;

  • 也可以自定义 枚举类处理器,通过配置文件注入,达到预定的效果;

3.必须配置

  • 需在配置文件中添加如下配置

    mybatis-plus:
      # enum 类所在包,启动后会加载进去
      type-enums-package: com.hare.mail.mgr.entity.enums
    

3.枚举类

  • 需要实现 IEnum 接口,重写 getValue() 方法 和 toString() 方法;
  • getValue() 方法 :在入库的时候呀进行调用;(返回 code值)
  • toString() 方法 :在回显的时候进行调用;(返回 code 值)

4.代码示例参考如下链接

https://blog.csdn.net/cold___play/article/details/104277445

5.枚举示例

/**
 * 资讯  审批状态:0、审核中(新增默认状态);1、通过;2、不通过
 */
@Data
public enum ApprovalEnum implements IEnum<Integer> {
    SH(0,"审核中"),
    TG(1,"通过"),
    NTG(2,"不通过");
    
    private int code;
    private String msg;
   
   
    // 入库
    @Override
    public Integer getValue() {
        return this.code;
    }

    // 回显
    @Override
    public String toString() {
        return this.msg;
    }

    
    public static String msg(int code) {
        for (ApprovalEnum m : ApprovalEnum.values()) {
            if (m.getCode() == code) {
                return m.getMsg();
            }
        }
        return null;
    }
    
}

版权声明:本文为qq_42868618原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。