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 中:



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.

你可能感兴趣的:(Java,数据库,mybatis,json,mysql)