某些类,如用户类,一般都有状态字段

    /**
     * 使用状态(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;
    }
}