九、MybatisPlus-进阶使用-JSON类型处理器

133 阅读2分钟

本文是系列文章,目录:
一、MybatisPlus-基本使用
二、MybatisPlus-进阶使用-条件构造器
三、MybatisPlus-进阶使用-自定义sql
四、MybatisPlus-进阶使用-Service接口(1)-基本使用
五、MybatisPlus-进阶使用-Service接口(2)-自定义service
六、MybatisPlus-进阶使用-Service接口(3)- 批量新增
七、MybatisPlus-进阶使用-逻辑删除
八、MybatisPlus-进阶使用-枚举处理器
九、MybatisPlus-进阶使用-JSON类型处理器
十、MybatisPlus-进阶使用-配置文件加密
十一、MybatisPlus-插件功能-分页插件(1)
十二、MybatisPlus-插件功能-分页插件(2)-通用分页封装
十三、MybatisPlus-插件功能-乐观锁插件
十四、MybatisPlus-插件功能-sql性能分析
十五、MybatisPlus-自动填充字段
MybatisPlus-问题汇总

JSON类型处理器

数据库中的数据可能存在,字段是varchar类型,但是存储的是JSON格式,我们要读取这样的属性非常不方便。如果要方便获取,我们更希望该字段查询结果最好是一个Map或者`实体类

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

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

使用JSON类型处理器

User实体中info字段存储的是json格式,我们以此为例进行演示。 image.png

1.定义info实体

package com.pino.demo.domain.po;
import lombok.Data;

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

2.使用类型处理器

  1. 在类上开启自动映射,autoResultMap=true,
  2. 字段修改为UserInfo类型:将User.java和UserVo.java类的info字段修改为UserInfo类型
  3. 声明类型处理器: 类属性上使用@TableField(typeHandler = JacksonTypeHandler.class)。
package com.pino.demo.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.pino.demo.enums.UserStatus;
import lombok.Data;

import java.time.LocalDateTime;

@Data
@TableName(value = "user", autoResultMap = true)
public class User {
    /**
     * 详细信息
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;
    
    ...
}