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、不通过
*/@DatapublicenumApprovalEnumimplementsIEnum<Integer>{SH(0,"审核中"),TG(1,"通过"),NTG(2,"不通过");privateint code;privateString msg;// 入库@OverridepublicIntegergetValue(){returnthis.code;}// 回显@OverridepublicStringtoString(){returnthis.msg;}publicstaticStringmsg(int code){for(ApprovalEnum m:ApprovalEnum.values()){if(m.getCode()== code){return m.getMsg();}}returnnull;}}