使用mybatisplus的通用枚举实现存储显示相分离

2年前 (2022) 程序员胖胖胖虎阿
268 0 0

狡兔尚且三窟,多学一招总没错吧?
🚀🚀扎哇太枣糕的博客首页🚀🚀
使用mybatisplus的通用枚举实现存储显示相分离

🌏 抛出问题

  如果让你实现这么一个功能:将性别使用数字存储到数据库中,但是前端需要获取到的是具体的性别描述(比如男女),你会怎么实现?
使用mybatisplus的通用枚举实现存储显示相分离  相信有很多的小伙伴想到的就是,在前端或者后端使用if语句判断从数据库中获取到的值,如果是0的话就返回或者输出女,如果是1的话就返回或者输出男。

    可以 但不优雅

  那我用switch判断总算优雅了吧

    优雅 但不够装13

  不够装13也是错?低调不是错,但是我们要让老板感觉花这些钱雇自己他值了,甚至还要让他感觉他赚到了。

🌎 解决问题

  对于MP的通用枚举,官方文档如是说道:mybatis-plus的官方文档对通用枚举的介绍,总结来说就是简单的三个步骤:创建枚举类、修改配置文件、修改实体类字段属性,接下来就以一个案例加深小伙伴们的理解
第一步: 创建枚举类,并给相应的字段添加相应的注解,两个注解的注释都在代码中给出了

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

/**
 * @author : mereign
 * @date : 2022/3/18 - 15:28
 * @desc : 性别的枚举类
 */

@Getter
@AllArgsConstructor
public enum SexEnum {

    FEMALE(0, "女"),
    MALE(1, "男"),
    GROUP(2, "组合"),
    NONE(3, "不详");

    // 将注解标识的属性值存储到数据库中
    @EnumValue
    private Integer sex;

    // 将注解标识的属性值返回给前端
    @JsonValue
    private String sexName;

}

第二步: 配置文件

mybatis-plus:
  # 声明枚举类所在包
  type-enums-package: com.xiaoyu.enums

第三步: 修改实体类字段属性,其他的属性都照常设置

/**
 * 性别(0女1男2组合3不明)
 */
private SexEnum sex;

前端控制器中使用的方法是MP中自带的list方法

/**
 * 查询所有歌手
 * @return
 */
@RequestMapping(value = "/allSinger", method = RequestMethod.GET)
public Object allSinger() {

    // 查询所有的歌手信息并返回
    return service.list();
}

测试
使用mybatisplus的通用枚举实现存储显示相分离  怎么回事?前端并没有输出任何内容,难道是装13不成?别急,让我们使用测试类简单分析一波使用mybatisplus的通用枚举实现存储显示相分离  根据测试类的返回值可以得知,从数据库中查询到的sex字段值既不是0|1也不是男|女而是null,这到底是怎么回事?
  经过半天的百度和试错,最终将原因锁定在字段类型上,原来是我们的数据库中sex的类型是tinyint而枚举类中使用@EnumValue修饰的字段类型是integer,由于字段类型不匹配导致返回的是一个null,这也就能够解释得通为什么前端不显示sex了。使用mybatisplus的通用枚举实现存储显示相分离  我的解决方案是将数据库中的类型改为int,虽然说数据库中使用tinyint可以节省数据库的存储空间,但是由于本人的能力有限,无法找到tinyint对应的java类型,最后无奈修改了数据库的表结构,如果小伙伴们有妙招的话,还请评论区告诉小扎扎使用mybatisplus的通用枚举实现存储显示相分离如此操作前端就显示信息了使用mybatisplus的通用枚举实现存储显示相分离

相关文章

暂无评论

暂无评论...