当前位置: 首页 > 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.dtcms.com/a/292358.html

相关文章:

  • ORACLE DATABASE 11.2.0.4 RAC Install
  • Vue-22-通过flask接口提供的数据使用plotly.js绘图(一)
  • Oracle定时清理归档日志
  • RAG(检索增强生成)里的文档管理
  • 二次供水管理系统:远程监控+智能调控+故障预警解决方案
  • 用ffmpeg 进行视频的拼接
  • 【指南】网络安全领域:HW 行动(国家网络安全攻防演练)是什么?
  • 一些Avalonia与WPF内容的对应关系和不同用法
  • 单一职责原则(SRP):构建高质量软件的基石
  • Java 并发性深度解析
  • JS WebAPIs DOM节点概述
  • 网络层传输
  • 4G车载录像机的作用详解:提升行车安全与智能管理的核心技术
  • 数字签名(Digital Signature)
  • XSS内容分享
  • Windows 环境排除 Windows Defender 对指定路径或进程的影响
  • 在vscode 使用 remote-ssh
  • 【接口自动化】掌握接口自动化:核心概念讲解(理论知识)
  • 微博视觉算法面试30问全景精解
  • 8.4 Java 原生 TCP Socket 实现 HTTP 请求解析和请求分发
  • OpenCV基本的图像处理
  • 本地数据库有数据,web页面无信息显示,可能是pymysql的版本问题【pymysql连接本地数据库新旧版本的区别】
  • 【测试开发】----用例篇
  • 高并发场景下的缓存问题与一致性解决方案(技术方案总结)
  • 设计模式——责任链模式
  • 建造者设计模式
  • Qt布局管理:实现美观界面的关键
  • 2025 年最新 AI 技术:全景洞察与深度解析​
  • 从 0 到 1 搞定nvidia 独显推流:硬件视频编码环境安装完整学习笔记
  • Arraylist与LinkedList区别