(MybatisPlus)通用枚举

在一个用户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

具体的业务代码:总结:

相关推荐
玹外之音33 分钟前
Spring AI 实战:手把手教你构建支持多会话管理的智能聊天服务
java·spring
callJJ1 小时前
Spring Bean 生命周期详解——从出生到销毁,结合源码全程追踪
java·后端·spring·bean·八股文
怒放吧德德1 小时前
AsyncTool + SpringBoot:轻量级异步编排最佳实践
java·后端
毅炼1 小时前
Java 集合常见问题总结(1)
java·后端
知识即是力量ol2 小时前
口语八股——Spring 面试实战指南(一):核心概念篇、AOP 篇
java·spring·面试·aop·八股·核心概念篇
utmhikari2 小时前
【架构艺术】治理后端稳定性的一些实战经验
java·开发语言·后端·架构·系统架构·稳定性·后端开发
文艺倾年2 小时前
【源码精讲+简历包装】LeetcodeRunner—手搓调试器轮子(20W字-上)
java·jvm·人工智能·tomcat·编辑器·guava
dfyx9992 小时前
Maven Spring框架依赖包
java·spring·maven
茶杯梦轩2 小时前
从零起步学习并发编程 || 第二章:多线程与死锁在项目中的应用示例
java·服务器·后端
日月云棠2 小时前
JAVA JDK 11 特性详解
java