MyBatisPlus(十七)通用枚举

news/2024/12/29 22:18:08/

说明

MyBatisPlus 优雅地使用枚举类型。

声明通用枚举属性

使用 @EnumValue 注解枚举属性

package com.example.web.enumeration;import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;/*** 性别枚举*/
@AllArgsConstructor
public enum GenderEnum {UNKNOWN(0, "未知"),MALE(1, "男"),FEMALE(2, "女");@EnumValue // 标记数据库存的值是 code@JsonValue // 序列化枚举值为 接口出参;接口入参(RequestBody),反序列化为枚举值private final int code;private final String description;}

实体属性使用枚举类型

package com.example.web.entity;import com.example.web.enumeration.GenderEnum;
import lombok.Data;@Data
public class User {private Long id;private String name;private Integer age;private String email;private Integer deleted;private GenderEnum gender;
}

数据库关系模式

在这里插入图片描述

测试

新增测试

代码

    /*** 插入用户(男性)*/@Testpublic void insertMale() {User user = new User();user.setId(10L);user.setName("钱一");user.setAge(26);user.setEmail("qianyi@example.com");user.setGender(GenderEnum.MALE);mapper.insert(user);}/*** 插入用户(女性)*/@Testpublic void insertFemale() {User user = new User();user.setId(11L);user.setName("钱二");user.setAge(26);user.setEmail("qianer@example.com");user.setGender(GenderEnum.FEMALE);mapper.insert(user);}/*** 插入用户(未填写性别)*/@Testpublic void insertUnknown() {User user = new User();user.setId(12L);user.setName("钱三");user.setAge(26);user.setEmail("qiansan@example.com");mapper.insert(user);}

结果

插入用户(男性):
在这里插入图片描述

插入用户(女性):
在这里插入图片描述

插入用户(未填写性别):
在这里插入图片描述

数据库中的数据:
在这里插入图片描述

查询测试

    @Testpublic void selectById() {User user = mapper.selectById(10);log.info("user:{}", user);}

// TODO 补充查询截图。

序列化枚举值为接口参数值

  1. 序列化枚举值为接口出参
  2. 接口入参(RequestBody),反序列化为枚举值。

这两种实现,都是通过 @JsonValue 注解实现的。
在这里插入图片描述

测试:序列化枚举值为接口出参

    @GetMappingpublic List<User> selectAll() {return userService.list();}

在这里插入图片描述

测试:接口入参(RequestBody),反序列化为枚举值

    @PostMappingpublic void addUser(@Valid @RequestBody User param) {log.info("新增用户:param={}", param);}

在这里插入图片描述

服务器接收到的数据,打印log

新增用户:param=User(id=70, name=小明, age=20, email=xiaoming@qq.com, deleted=0, gender=MALE)

Query参数,使用枚举(待完善,暂不推荐)

当前方法,使用枚举的名字作为请求参数。

更好的办法是,使用枚举值,和Body参数以及数据库中定义保持一致。

配置代码

package com.example.core.config;import org.springframework.boot.convert.ApplicationConversionService;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {// 通过ApplicationConversionService向应用中注入ConverterApplicationConversionService.configure(registry);}
}

接口测试

    @GetMapping("selectByUser")public List<User> selectByUser(User query) {log.info("查询用户:query={}", query);LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(!ObjectUtils.isEmpty(query.getGender()), User::getGender, query.getGender());return userService.list(wrapper);}

在这里插入图片描述

Log日志:

查询用户:query=User(id=null, name=null, age=null, email=null, deleted=null, gender=MALE)

在这里插入图片描述


http://www.ppmy.cn/news/1147437.html

相关文章

Maven Web应用

目录 创建 Web 应用 构建 Web 应用 部署 Web 应用 测试 Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目&#xff0c;如何创建、构建、部署以及运行一个 web 应用。 创建 Web 应用 我们可以使用 maven-archetype-webapp 插件来创建一个简…

Qt 子线程中无限递归的信号槽导致主线程槽失效的原因和解决办法

Qt 子线程中无限递归的信号槽导致主线程槽失效的原因和解决办法 问题描述 在一个 Qt6.5.3 的项目中&#xff0c;有一个 ImageProcessor 类负责在子线程中进行图像处理&#xff0c;并有一个 MainWindow 类在主线程中进行界面更新。虽然 ImageProcessor::processingDone 信号被…

C++入门(1)

目录 1.C关键字2.命名空间(namespace)2.1是什么2.2为什么2.3怎么用 3.C输入&输出4.缺省函数概念分类 5.函数重载6.引用6.1概念6.2特性6.3使用场景6.4引用和指针的不同点 1.C关键字 C总共有63个关键字 这里入门不多说&#xff0c;有需要的自行去了解 2.命名空间(namespac…

[安洵杯 2019]easy_web - RCE(关键字绕过)+md5强碰撞+逆向思维

[安洵杯 2019]easy_web 1 解题流程1.1 阶段一1.2 阶段二2 思考总结1 解题流程 1.1 阶段一 1、F12发现提示md5 is funny ~;还有img标签中,有伪协议和base64编码 2、url地址是index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=   这就有意思了,这里的img明显是编码后的…

8年经验之谈 —— 如何用 JMeter 编写性能测试脚本?

Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本&#xff1f; 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 i STEP 2. 了解配置信息 HTTP 请求各项信息说明&#xff08;以 JMeter 5.1 为例&#xff09;。 如下图所示&#xff1a; W…

TCP/IP(十)TCP的连接管理(七)CLOSE_WAIT和TCP保活机制

一 CLOSE_WAIT探究 CLOSE_WAIT 状态出现在被动关闭方,当收到对端FIN以后回复ACK,但是自身没有发送FIN包之前 ① 服务器出现大量 CLOSE_WAIT 状态的原因有哪些? 1、通常来讲,CLOSE_WAIT状态的持续时间应该很短,正如SYN_RCVD状态2、但是在一些特殊情况下,就会出现大量连接长…

MySQL数据生成工具mysql_random_data_load

在看MySQL文章的时候偶然发现生成数据的工具&#xff0c;此处直接将软件作者的文档贴了过来&#xff0c;说明了使用方式及下载地址 Random data generator for MySQL Many times in my job I need to generate random data for a specific table in order to reproduce an is…

MongoDB 笔记

1 insert 、create、save区别 insert: 主键不存在则正常插入&#xff1b;主键已存在&#xff0c;抛出DuplicateKeyException 异常 save: 主键不存在则正常插入&#xff1b;主键已存在则更新 insertMany&#xff1a;批量插入&#xff0c;等同于批量执行 insert create&#x…