Mybatis Plug枚举使用(@EnumValue、@JsonValue),防止有结果却查回null

Mybatis Plug枚举使用(@EnumValue、@JsonValue)

注解说明:

①、@EnumValue:存储数据库的属性
②、@JsonValue:返回前端界面的属性

注意:

枚举字段最好不要存tinyint(1)否则在被mybatis plug转化中,会被变为Boolean导致查询不到结果,可以存tinyint(4),以避免这个问题。
tinyint(1)和tinyint(4)在存储上都是占用一个字节,通常使用tinyint(1)存取Boolean值,使用tinyint(4)存储数字格式的数据。

1、映入mybatis plug的maven坐标

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

2、yml配置文件扫描

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  #全局逻辑删除字段值 3.3.0开始支持
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
      id-type: auto # 主键自增
  type-enums-package: com.cfay.**.common.enums # 配置枚举扫描包

3、编写枚举类

  1. 方式一:
package com.cfay.journal.common.enums;

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

/**
 * @Author lcb
 * @Date 2022/07/26
 **/
@Getter
public enum EnableEnums {

    SEQUENTIAL_TEST(3, "顺序测试"),
    DISABLED(0, "禁用"),
    ENABLE(1, "启用"),
    INIT(2, "初始状态");

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

    @EnumValue
    private final Integer code;

    @JsonValue
    private final String message;
}

  1. 方式二:
package com.cfay.journal.common.enums;

import com.baomidou.mybatisplus.annotation.IEnum;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;

/**
 * @Author lcb
 * @Date 2022/07/26
 **/
@Getter
public enum EnableEnums implements IEnum<Integer>{

    SEQUENTIAL_TEST(3, "顺序测试"),
    DISABLED(0, "禁用"),
    ENABLE(1, "启用"),
    INIT(2, "初始状态");

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

    private final Integer code;

    @JsonValue
    private final String message;

    @Override
    public Integer getValue() {
        return this.code;
    }
}

4、测试说明

推荐:当status传枚举对应的字段,数据库保存的是枚举对应的code,比如:启用或禁用,如下图

在这里插入图片描述

不推荐:当status传0-3或"0"-"3"的情况下,数据库保存的值是对应枚举类的位置字段值,如下图

在这里插入图片描述

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在使用 MyBatis-Plus 进行开发时,@EnumValue 注解通常用于自动填充枚举类型的字段值。然而,当你想要通过 HTTP 请求中的 @ResponseBody 提交 JSON 数据时,直接使用 @EnumValue 注解可能无法正常工作,因为它是设计来在 MyBatis-Plus 的自动填充机制中使用的,而不是直接与 Spring MVC 的请求处理交互。 要解决这个问题,你可以采取以下步骤: 1. 自定义枚举转换器:实现 `WebMvcConfigurer` 接口,并重写 `addFormatters` 方法,添加一个自定义的 `ConversionService`,用于处理枚举类型字段的转换。 2. 在自定义枚举转换器中,注册枚举类型的转换器,这样 Spring MVC 就能在请求处理过程中将字符串转换为对应的枚举对象。 下面是一个简单的示例代码: ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new Converter<String, YourEnumType>() { @Override public YourEnumType convert(String source) { return YourEnumType.valueOf(source); } }); } } ``` 在这个示例中,你需要将 `YourEnumType` 替换为你需要转换的枚举类的名称。这样,当 Spring MVC 接收到含有枚举类型字段的 JSON 数据时,会使用你的自定义转换器来将字符串转换为枚举对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcb9354

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值