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