说明:之前介绍过手动写一个数据库字段类型处理器,本文介绍 MyBatis-Plus 自带的封装好了的字段类型处理器使用。
注解方式
如下,是一个 DO 对象,其中 address 字段,在数据库中是 json 类型,准确的说,是 json 数组类型
java
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName(value = "tb_users")
public class UserDO implements Serializable {
@TableId
private Long id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 地址
*/
private String address;
}
数据如下:

这样的数据,可以直接使用 String 类型接收,查询如下:

像封装到对象里,可使用 MyBatis-Plus 的 TableField()
注解,如下:
java
/**
* 地址
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<AddressDTO> address;
需要注意的是,类上的 @TableName()
注解需添加自动映射设置,不然没有效果

另外,封装的 AddressDTO 对象,对应的构造方法,setter/getter 方法,也不要缺,如下:
java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddressDTO implements Serializable {
/**
* 城市
*/
private String city;
/**
* 国家
*/
private String country;
/**
* 详细地址
*/
private String detail;
}
查询,可见数据被封装到 DTO 对象里

XML方式
如果是在 Mapper.xml 中手写的 SQL,就更方便了,在 ResultMap 标签中指定 MyBatis-Plus 中对应的字段类型处理器即可,如下:

可能封装进来(类上的注解和自动映射的配置可以去掉了)

另外
除了将 json 数组类型的数据,封装到一个对象集合里,MyBatis-Plus 还提供了其他几个字段类型处理器,翻一下源码,可以看到下面这几个处理器

也可以直接封装到 Fastjson 里,如 JSONArray
java
/**
* 地址
*/
@TableField(typeHandler = Fastjson2TypeHandler.class)
private JSONArray address;
看,还省的创建 DTO 了
