在一个用户User实体类中,有一个status字段,1表示冻结,2表示可用
java
/**
* 使用状态(1正常 2冻结)
*/
private Integer status;
然而在更复杂的业务情况下,这个字段值往往会有多个,当值变多的话,我们无法记住所有的
所以我们定义了一个枚举类
java
package com.itheima.mp.enums;
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;
}
}
方法一(非MybatisPlus):
这样子我们在比较的时候,就可以通过与枚举类的value值来进行比较了
方法二(用MybatisPlus通用枚举处理器):
把User
类中的status
字段改为UserStatus
类型:
java
/**
* 使用状态(1正常 2冻结)
*/
private UserStatus status;
但是我们在数据库中的字段仍然还是int类型的,所以为了让MybatisPlus
处理枚举与数据库类型自动转换,我们必须告诉MybatisPlus
,枚举中的哪个字段的值作为数据库值。
MybatisPlus
提供了@EnumValue
注解来标记枚举属性:
以及在UserStatus枚举中通过@JsonValue
注解标记JSON序列化时展示的字段(最后返回的响应结果应该展示哪个值,默认是枚举的字段名,如果放在value上面那么就会是value):
java
package com.itheima.mp.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
@Getter
public enum UserStatus {
NORMAL(1,"正常"),
FROZEN(2,"冻结");
@EnumValue //这样mp就知道是把这个属性往数据库里面去写
@JsonValue //将来返回的就是value值,否则默认就是NORMAL或者FROZEN
private final int value;
private final String desc;
UserStatus(int value, String desc) {
this.value = value;
this.desc = desc;
}
public int getValue() {
return value;
}
public String getDesc() {
return desc;
}
}
此外还需要在application.yaml文件中添加配置:
java
mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
具体的业务代码:总结: