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

举报
扎哇太枣糕 发表于 2022/09/10 11:38:51 2022/09/10
【摘要】 狡兔尚且三窟,多学一招总没错吧?🚀🚀扎哇太枣糕的博客首页🚀🚀 🌏 抛出问题  如果让你实现这么一个功能:将性别使用数字存储到数据库中,但是前端需要获取到的是具体的性别描述(比如男女),你会怎么实现?  相信有很多的小伙伴想到的就是,在前端或者后端使用if语句判断从数据库中获取到的值,如果是0的话就返回或者输出女,如果是1的话就返回或者输出男。    可以 但不优雅  那我用swi...

狡兔尚且三窟,多学一招总没错吧?
🚀🚀扎哇太枣糕的博客首页🚀🚀
在这里插入图片描述

🌏 抛出问题

  如果让你实现这么一个功能:将性别使用数字存储到数据库中,但是前端需要获取到的是具体的性别描述(比如男女),你会怎么实现?
在这里插入图片描述  相信有很多的小伙伴想到的就是,在前端或者后端使用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();
}

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。