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;
}
}