MyBatisPlus从零到一:快速入门与核心功能详解(5)

米饭20小时前行业资讯9

3.4 通用枚举:

MybatisPlus 提供了一个处理枚举的类型转换器,可以帮我们把枚举类型与数据库类型自动转换。


3.4.1 创建枚举对象并添加 @EnumValue 注解

要让MybatisPlus处理枚举与数据库类型自动转换,我们必须告诉MybatisPlus,枚举中的哪个字段的值作为数据库值。


MybatisPlus提供了@EnumValue注解来标记枚举属性:

@Getter
public enum UserStatus {
    NORMAL(1,"正常"),
    FREEZE(2,"冻结"),
    ;

    @EnumValue
    private final Integer code;
    private final String desc;

    UserStatus(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }
}

3.4.2 配置枚举处理器:

在application.yaml文件中添加配置:

mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

测试代码:

@Test
void testService(){
    List<User> list = userService.list();
    list.forEach(System.out::println);
}

F2B670FC-091C-4232-8E12-50BC47AAF4C3.jpeg

因此我们可以知道,在配置完枚举处理器和添加 @EnumValue 注解后,MybatisPlus 会自动帮助我们完成 Java 枚举对象和数据库列字段的转化。


3.4.3 @JsonValue 注解:

如果我们想要枚举对象在前端展示对象其中的一个属性,可以通过 @JsonValue 添加在对应的属性上,MybatisPlus 会自动帮助我们进行转化。

image-20241110085834121

未添加 @JsonValue 注解之前。

ba0c774216eebd5b5ab143b5f00d33dd.png添加 @JsonValue 注解之后。

fd39bf30a94fe0d1ba60855e47af13c2.png

3.5 JSON 类型处理器:

数据库的 user 表中有一个info字段,是 JSON 类型:

image-20241110090155800

格式类似这样:

{"age": 20, "intro": "佛系青年", "gender": "male"}

但是我们 Java 当中没有 Json 这个类型,所以我们只能采用 String 来进行接收。

image-20241110090322161

这样一来,我们要读取 info 中的属性时就非常不方便。如果要方便获取,info 的类型最好是一个Map或者实体类。


而一旦我们把info改为对象类型,就需要在写入数据库时手动转为String,再读取数据库时,手动转换为对象,这会非常麻烦。


因此 MybatisPlus 提供了很多特殊类型字段的类型处理器,解决特殊字段类型与数据库类型转换的问题。例如处理 JSON 就可以使用JacksonTypeHandler处理器。


3.5.1 定义存储实体:

@Data
public class UserInfo {
    private Integer age;
    private String intro;
    private String gender;
}

3.5.2 使用类型处理器:

接下来,将 User 类的 info 字段修改为 UserInfo 类型,并声明类型处理器:

image-20241110092022769

注意:由于这样是对象套对象,我们需要处理映射关系(resultMap),这样才能把数据传输到 info 属性上。

MybatisPlus 帮助我们处理了对象套对象的映射关系,我们只需要在对应类上添加注解 @TableName(autoResultMap = true)。即可。

image-20241110092627426 效果如下:

image-20241110092851916

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南

【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过使用 Docker Compose,开发者可以使用 YAML 文件来配置应用服务,并通过单一命令来启动和停止服务...

微服务保护和分布式事务(2)

微服务保护和分布式事务(2)

1.2 Sentinel:微服务保护的技术有很多,但在目前国内使用较多的还是 Sentinel,所以接下来我们学习 Sentinel 的使用。1.2.1 介绍和安装:Sentinel 是阿里巴巴开源的...

如何为阿里云服务器配置域名

如何为阿里云服务器配置域名

域名是互联网上的门牌号,它将用户输入的网址转换为服务器的IP地址,从而让用户能够访问到服务器上托管的网站或应用。阿里云作为国内领先的云服务提供商,提供了强大的服务器和域名管理服务。本文将详细介绍如何为...

Spring AMQP与RabbitMQ深度整合指南:从基础到高级应用(1)

Spring AMQP与RabbitMQ深度整合指南:从基础到高级应用(1)

一、初识 MQ1.1 同步调用:我们观察下,下面这个余额支付功能的流程图:如果我们采用的是基于 OpenFeign 的同步调用,也就是说业务执行流程是这样的:支付服务需要先调用用户服务完成余额扣减。然...

MSP 的现场服务管理

MSP 的现场服务管理

什么是现场服务管理现场服务管理 (FSM) 是确保有效规划、安排和执行现场服务活动所遵循的做法。它涉及有效利用资源,如人员、技术和材料,以满足客户的服务期限和标准。FSM还涉及现场技术人员,服务交付经...

【Docker】0.空间资源隔离

【Docker】0.空间资源隔离

NameSpacedd + option : 可以从标准输入或文件中读取数据,根据指定格式来转换数据,再输出到文件、设备或标准输出 --help 显...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。