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

米饭8个月前行业资讯388

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


相关文章

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

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

3.5 声明交换机和队列:在之前我们都是基于RabbitMQ控制台来创建队列、交换机。但是在实际开发时,队列和交换机是程序员定义的,将来项目上线,又要交给运维去创建。那么程序员就需要把程序中运行的所有...

Docker 常用命令

Docker 常用命令

 一、Docker 基础命令1、启动 dockersystemctl start docker2、关闭 dockersystemctl stop docker3、重启 dockersyste...

Docker:技术架构的演进之路(下)

Docker:技术架构的演进之路(下)

冷热分离架构六、冷热分离架构为了进一步提高系统的并发性能,系统进入冷热分离架构阶段。在这个阶段,引入缓存,实现冷热分离。将热点数据放入缓存中,冷数据放入数据库中,实现数据库的快速响应。这种架构的优点是...

gitlab和jenkins连接

gitlab和jenkins连接

一:jenkins 配置安装gitlab插件   生成密钥id_rsa 要上传到jenkins,id_rsa.pub要上传到gitlabcat /root/.ssh/id_rsa复...

Docker 基础与实战指南(4)

Docker 基础与实战指南(4)

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

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

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

2.3 XA 模式:Seata 支持四种不同的分布式事务解决方案:XATCCATSAGA这里我们以XA模式和AT模式来给大家讲解其实现原理。XA 规范是 X/Open 组织定义的分布式事务处理(DTP...

发表评论    

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