MyBatis-Plus字段类型处理器使用
说明:之前介绍过手动写一个数据库字段类型处理器,本文介绍 MyBatis-Plus 自带的封装好了的字段类型处理器使用。
- Mybatis中封装数据如何自定义一个数据类型处理器
注解方式
如下,是一个 DO 对象,其中 address 字段,在数据库中是 json 类型,准确的说,是 json 数组类型
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 {@TableIdprivate Long id;/*** 用户名*/private String username;/*** 密码*/private String password;/*** 地址*/private String address;
}
数据如下:
这样的数据,可以直接使用 String 类型接收,查询如下:
像封装到对象里,可使用 MyBatis-Plus 的 TableField()
注解,如下:
/*** 地址*/@TableField(typeHandler = JacksonTypeHandler.class)private List<AddressDTO> address;
需要注意的是,类上的 @TableName()
注解需添加自动映射设置,不然没有效果
另外,封装的 AddressDTO 对象,对应的构造方法,setter/getter 方法,也不要缺,如下:
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
/*** 地址*/@TableField(typeHandler = Fastjson2TypeHandler.class)private JSONArray address;
看,还省的创建 DTO 了