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

米饭3个月前行业资讯210

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


相关文章

MySQL运维之日志与主从复制

MySQL运维之日志与主从复制

一、日志1.错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此...

如何理解运维

如何理解运维

运维工程师(运营),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率,优化资源利用率提高整体的投资回报率。运维工程师面对的最大挑战是大规模集群的管理问题,如何管理好几十万台服务器上的...

【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议

【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议

一、以太网帧         "以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容...

JAVA 程序员-云计算学习路径

JAVA 程序员-云计算学习路径

课程内容关系图第一章:容器化基础云计算简单概念测试安装 Nginx服务器的安全组设置按量付费优点私有网络 VPC 实战Docker 基础概念开通华为服务器Docker 安装镜像操作容器操作修改容器内容...

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

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

三、SpringAMQP将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了 AMQP 协议,因此它具备跨语言的特性。任何语言只要遵循 AMQP 协...

深入了解Linux命名空间中cgroups相关概念:打开容器技术的黑匣子

深入了解Linux命名空间中cgroups相关概念:打开容器技术的黑匣子

一、cgroups概念cgroup全称是control groups,被整合在了linux内核当中,把进程(tasks)放到组里面,对组设置权限,对进程进行控制。可以理解为用户和组的概念,用户会继承它...

发表评论    

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