MyBatis Plus处理Mysql JSON Data Type类型字段
MySQL 自5.7.8版本开始,支持了JSON格式数据的存储和查询,在此版本前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 数据。相对字符类型,原生的 JSON 类型具有以下优势:
在插入时能自动校验是否满足 JSON 格式的要求。
优化了存储格式,无需读取整个字段就能快速访问某个元素的值。
本文记录与MyBatis Plus结合使用的过程。
实体类
使用TypeHandler (字段类型处理器)通过@TableField注解快速注入到 MyBatis 容器中
@Data
@Accessors(chain = true)
@TableName(autoResultMap = true)
public class User {
private Long id;
...
/**
* 注意!! 必须开启映射注解
*
* @TableName(autoResultMap = true)
*
* 以下两种类型处理器,二选一 也可以同时存在
*
* 注意!!选择对应的 JSON 处理器也必须存在对应 JSON 解析依赖包
*/
@TableField(typeHandler = JacksonTypeHandler.class)
// @TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject jsonObj;
}
该注解对应XML 中:
<result property="jsonObj" column="JSON_OBJ" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
Insert/Update操作
对指定JSON字段需要在XML中指定typeHander
JSON_OBJ = #{jsonObj,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
否则找不到TypeHander完不成对应映射,会产生如下异常:
### Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'jsonObj'. It was either not specified and/or could not be found for the javaType (com.alibaba.fastjson2.JSONObject) : jdbcType (null) combination.