当前位置: 首页 > news >正文

MybatisPlus-16.扩展功能-枚举处理器

一.枚举处理器

我们的表中有标识用户状态的字段,这个字段中有两个状态值,1代表正常,2代表冻结。那么我们要使用这些状态就会出现一些问题:

1.如果状态值较多,那么使用数字去表示很麻烦。

2.状态值较多我们也无法通过数字去辨别具体哪个数字代表哪个状态。

因此我们基于数字去进行赋值和比较就很麻烦,容易出错。因此我们使用枚举表示。

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;}
}

但是我们定义好枚举类后,并不能解决以下两个问题:

1.我们在定义实体类时,状态字段仍然是Integer类型。

2.在比较时仍然和Integer类型的字段比较。在赋值时仍然赋Integer。

这样会很麻烦。

因此我们会将User的status字段直接改为枚举类型UserStatus。枚举可以直接使用==比较。

但这样会带来另一个问题,数据库表当中status依然是int类型,但是po是枚举类型。那我们查到的数据库中的字段要去转枚举,而写入数据库时也要转为int类型。这样就会十分麻烦。这就涉及到java当中枚举类型和数据库中的类型的相互转换。 

mp为我们解决了这些问题,mp加入了枚举类型和json类型的处理器。

使用@EnumValue注解加到和数据库字段对应的枚举字段上,就能实现自动的对应。这样查询和写数据库时就会从枚举中查或写对应的值。

然后在配置文件中配置让枚举处理器生效的配置即可。 

 当修改过接口使用枚举后,我们进行数据查询。查到的数据如下,可以看到status变成了我们定义的枚举值。

如果我们不想让其返回枚举值,而是返回1,2或者是正常,冻结。我们可以使用注解@JsonValue,将该注解加在指定返回的属性上,指定查询枚举值时以哪个值返回。

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, "正常"),FORZEN(2, "冻结"),;@EnumValue      // 指定哪个枚举值映射到数据库字段private final Integer status;@JsonValue      // 指定查询枚举值时以哪个值返回private final String description;UserStatus(Integer status, String description) {this.status = status;this.description = description;}
}

http://www.lryc.cn/news/596113.html

相关文章:

  • SpringMVC快速入门之核心配置详解
  • 【windows修复】解决windows10,没有【相机] 功能问题
  • Azure可靠性架构指南:构建云时代的高可用系统
  • xss-labs解答
  • 本地数据库有数据,web页面无信息显示,可能是pymysql的版本问题【pymysql连接本地数据库新旧版本的区别】
  • 【51单片机定时器T0输出10毫秒周期方波12M晶振】2022-6-28
  • Web开发 05
  • verilator如何实现RTL的仿真(腾讯混元)
  • 牛客NC16625 [NOIP2009]分数线划定(排序)
  • vue3:十八、内容管理-实现内容的数据展示,开关switch设行,tag标签展示
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十七天
  • Datawhale AI 夏令营-心理健康Agent开发学习-Task1
  • React 面试题库
  • Vue 3 面试题全套题库
  • 前端面试专栏-工程化:29.微前端架构设计与实践
  • class和struct的区别
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 腾讯研究院 | AI 浪潮中的中国品牌优势解码:华为、小米、大疆、科大讯飞等品牌从技术破壁到生态领跑的全维突围
  • Kotlin调试
  • IO复用(多路转接)
  • Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)
  • 二叉树的题目,咕咕咕
  • VirtualBox安装提示security安全问题
  • 控制器(Controller)模块的架构与工作流程 -OpenExo
  • Agent架构与工作原理:理解智能体的核心机制
  • Nacos 注册中心高频面试题及解析
  • 从感知到决策:虚拟仿真系统与视觉算法融合下的多路RTSP视频接入技术探究
  • 将生产库的数据连同表结构一起复制到测试库中
  • 如何安装没有install.exe的mysql数据库文件
  • ZLMediaKit 入门