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

米饭10个月前行业资讯799

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


相关文章

windows10家庭版禁用Device/Credential Guard解决方案

windows10家庭版禁用Device/Credential Guard解决方案

背景(禁用的原因)在安装Windows版的docker后,由于Windows版本自带虚拟机,折腾完后却发现原来安装的VMware Workstation Pro和Oracle VM VirtualBo...

Linux 用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法

Linux 用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法

一、问题原因如下:出现这个问题是因为yum在安装包的过程中,虽然已经联网,但是没法解析远程包管理库对应的域名,所以我们只需要在网络配置中添加上DNS对应的ip地址即可。二、处理方案:1. 编辑修改网卡...

Dockerfile和docker-compose详解

Dockerfile和docker-compose详解

一、Dockerfile1. Dockerfile简介Dockerfile是一个用来构建镜像的文本文件, 文本内容包含了一条条构建镜像所需的指令和说明。例如我们要在含python3的cent...

ubuntu设置共享文件夹

ubuntu设置共享文件夹

本文基于在VMware虚拟机环境下安装的ubuntu桌面版,且以及安装好Vmwaretools,如果根据本文未设置成功,请重装VMwaretools一、设置共享文件夹首先打开虚拟机,右击选项卡打开虚拟...

【Docker】深入理解 Dockerfile:构建高效 Docker 镜像的指南

【Docker】深入理解 Dockerfile:构建高效 Docker 镜像的指南

Dockerfile 是 Docker 的核心组成部分之一,它定义了如何构建 Docker 镜像。Dockerfile 是一份文本文件,其中包含了构建 Docker 镜像所需的所有命令和参数。通过 D...

Docker 基础与实战指南(4)

Docker 基础与实战指南(4)

2.4 网络:默认情况下,所有容器都是以 bridge 方式连接到 Docker 的一个虚拟网桥上:容器在同一个网桥上就可以相互访问。下图就是我的 linux 上的默认网桥。下面我们来测试一下。首先,...

发表评论    

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