Mybatis-plus通用枚举

通用枚举的配置可以优化代码,增强代码的可读性

效果:插入数据时:与前端商定传递枚举属性序数值(0,1,2 )或者 枚举字面量 或者枚举属性name值 (下架,发布中,暂存)其中一种方式(不同方式可能需要重写JsonDeserializer<>的deserialize方法,后面会讲),后端用枚举类型接收,数据库保存0,1,2,查询时:返回json数据 下架,发布中,暂存。

官网地址:通用枚举 | MyBatis-Plus

①声明通用枚举属性,使用@EnumValue标记数据库存的值,使用@JsonValue标记响应前端json的值

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

@Getter
@Slf4j
public enum ReleaseStatusEnum {
    /**
     * 下架
     */
    DOWN(0, "下架"),
    /**
     * 发布中
     */
    PUBLISHING(1, "发布中"),
    /**
     * 暂存
     */
    TEMP_SAVE(2, "暂存");

    ReleaseStatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    @EnumValue
    private final Integer code;
    @JsonValue
    private final String message;
}

 ②配置扫描通用枚举,两种方式任选其一即可,注意,第二种不通的版本对应的EnumTypeHandler类名和路径可能不同

mybatis-plus.type-enums-package=com.xxx.localdemo.web.*.*
mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler

③前端参数传递:如果你以枚举的属性进行传参,但枚举的序数不是从0开始,或者以枚举字面量进行传参,那么你需要声明反序列化类继承JsonDeserializer<>,重写deserialize方法,使用@JsonDeserialize(using = ReleaseStatusEnum .Deserializer.class)标记反序列化规则。如果你以枚举的属性进行传参,且枚举的序数是从0开始那么不重写也可以;

 public static class Deserializer extends JsonDeserializer {

        @Override
        public ReleaseStatusEnum deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            String text = jsonParser.getText();

            try {
                for (ReleaseStatusEnum releaseStatusEnum : ReleaseStatusEnum.values()) {
                    if (releaseStatusEnum.getCode().equals(Integer.valueOf(text))) {
                        return releaseStatusEnum;
                    }
                }
                return null;
            } catch (Exception e) {
                log.warn("反序列化枚举类出错", e);
                return null;
            }
        }
    }

接收前端对象的对应属性添加  @JsonDeserialize指定反序列化方式

  /**
     * 发布状态 0下架 1发布 2暂存
     */
    @JsonDeserialize(using = ReleaseStatusEnum.Deserializer.class)
    private ReleaseStatusEnum releaseStatus;

效果如图:

前端参数转换

Mybatis-plus通用枚举_第1张图片

 存入数据库的值

Mybatis-plus通用枚举_第2张图片

 查询展示到前端的数据

Mybatis-plus通用枚举_第3张图片

你可能感兴趣的:(java,mybatis)