详解mybatis-plus使⽤@EnumValue注解的⽅式对枚举类
型的处理
前⾔:
在开发中,我们经常会⽤到诸如:性别(男/⼥)、审核状态(未审核/审核中/已审核)之类的数据,通常会在数据库中使⽤⼀个数字类型的字段来标识,⽐如:性别,⽤1来表⽰男,2来表⽰⼥,⽽在代码中⼀般会定义成enum类型或静态常量来避免在业务代码中出现“0/1”这种魔法值,但是在数据库存储及前后端交互的时候,就需要进⾏转化;⽆论是在SQL、前端还是后台转化,都需要写相应的代码,⽆形中增加了开发⼯作量;mybatis-plus实现了对该问题的处理,能够让我们在查询数据库时,直接能够返回字段标识的意思。配置如下:
第⼀步:
创建枚举类,在需要存储数据库的属性上添加@EnumValue注解,在需要前端展⽰的属性上添加@JsonValue注解;package stant;
import batisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum SexEnum {
MAN(1, "男"),
WOMAN(2, "⼥");
@EnumValue
private Integer key;
@JsonValue
private String display;
SexEnum(Integer key, String display) {
this.key = key;
this.display = display;
}
public Integer getKey() {
return key;
}
public String getDisplay() {
return display;
}
}enum c++
第⼆步:
application.properties⽂件⾥添加配置,定义扫描枚举类的包路径;
#配置枚举⽀持通配符 * 或者 ; 分割
#figuration.default-enum-type-handler=org.pe.EnumOrdinalTypeHandler
第三步:
pojo中的sex属性设置为枚举SexEnum;
@ApiModelProperty(value = "性别")
@TableField("sex")
private SexEnum sex;
测试:
@Test
public void insert() {
UserInfo userInfo = new UserInfo();
userInfo.setAge(22);
userInfo.setName("李四");
userInfo.setSex(SexEnum.WOMAN);
userInfoMapper.insert(userInfo);
System.out.println(userInfo);
}
数据库保存的值:
ID NAME AGE SEX
1张三111
2李四222
3王五331
前端显⽰的值:
[
{"id":"1","name":"张三","age":11,"sex":"男"},
{"id":"2","name":"李四","age":22,"sex":"⼥"},
{"id":"3","name":"王五","age":33,"sex":"男"}
]
注意事项:
@EnumValue标记的枚举类属性的类型要和数据库字段的类型对应,否则在查询数据的时候⽆法转化为枚举类型,并显⽰为null;
如果查询的时候,数据库字段的值匹配不到枚举,程序运⾏时并不会报错,⽽是显⽰为null;
在保存的时候,前端需要传递@JsonValue标记的枚举类属性的值,即"男/⼥";因为Enum的属性ordinal(int),在测试过程中,传枚举值在枚举类中的定义顺序(或者称为索引,顺序从0开始),也可以转换为相应的枚举值,⽐如:上⾯定义的SexEnum枚举,前端传0或者"0",会转换成MAN,传1或者"1"会
转换成WOMAN;传其他值会报异常:com.fasterxml.InvalidFormatException: Cannot deserialize value of type
stant.SexEnum from String "3": not one of the values accepted for Enum class: [⼥, 男]或com.fasterxml.InvalidFormatException: Cannot deserialize value of
stant.SexEnum from number 3: index value outside legal index range [0..2];
到此这篇关于详解mybatis-plus使⽤@EnumValue注解的⽅式对枚举类型的处理的⽂章就介绍到这了,更多相关mybatis-plus EnumValue枚举内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论