某些类,如用户类,一般都有状态字段
/**
* 使用状态(1正常 2冻结)
*/
private Integer status;
像这种字段我们一般会定义一个枚举,做业务判断的时候就可以直接基于枚举做比较。但是我们数据库采用的是int类型,对应的PO也是Integer。因此业务操作时必须手动把枚举与Integer转换,非常麻烦。
因此,MybatisPlus提供了一个处理枚举的类型转换器,可以帮我们把枚举类型与数据库类型自动转换。
具体方式如下:
1. 定义枚举
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
@Getter
public enum UserStatus {
NORMAL(1, "正常"),
FREEZE(2, "冻结")
;
private final int value;
private final String desc;
UserStatus(int value, String desc) {
this.value = value;
this.desc = desc;
}
}
2. 然后把User类中的status字段改为UserStatus 类型
/**
* 使用状态(1正常 2冻结)
*/
private UserStatus status;
但是这样还不够,要让MybatisPlus处理枚举与数据库类型自动转换,我们必须告诉MybatisPlus,枚举中的哪个字段的值作为数据库值。
3. 使用 @EnumValue 注解来标记枚举属性
@Getter
public enum UserStatus {
NORMAL(1, "正常"),
FREEZE(2, "冻结")
;
@EnumValue // TODO 记得添加这个用来标记枚举属性
private final int value;
private final String desc;
UserStatus(int value, String desc) {
this.value = value;
this.desc = desc;
}
}
4. 配置枚举处理器
在application.yaml文件中添加配置:
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
5. 为了使页面查询结果也是枚举格式,我们需要修改UserVO中的status属性
即把原来的Integer类型的status,修改成枚举的UserStatus即可
6. 并且,在UserStatus枚举中通过@JsonValue注解标记JSON序列化时展示的字段
@Getter
public enum UserStatus {
NORMAL(1, "正常"),
FREEZE(2, "冻结")
;
@EnumValue
private final int value;
@JsonValue // 想给前端返回哪个就可以将这个加在哪个字段上
private final String desc;
UserStatus(int value, String desc) {
this.value = value;
this.desc = desc;
}
}