MyBatis-Puls如何处理Json数据类型

MyBatis Puls中已经定义了三种处理方式:FastjsonTypeHandlerGsonTypeHandlerJacksonTypeHandler我们可以直接使用。

在对应的位置添加属性 autoResultMap = truetypeHandler = FastjsonTypeHandler.class即可。

方式一、

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;

import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;

@TableName(value = "sys_user", autoResultMap = true)
public class SysUser extends Model<SysUser>{
    
    private Integer id;
    
    private String userName;
    
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONArray roles;

}

方式二、

<resultMap id="sysUserMap" type="com.jayknoxqu.entity.SysUser" autoMapping="true">
    <id column="user_id" property="userId"/>
    <result column="user_name" property="userName"/>
    <result column="roles" property="role" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
</resultMap>

方式三、

异常:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'

注意: set 处理 typeHandler 需要设置 mapping

/**
 * 设置 更新 SQL 的 SET 片段
 *
 * @param condition 是否加入 set
 * @param column    字段
 * @param val       值
 * @param mapping   例: javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler
 * @return children
 */
Children set(boolean condition, R column, Object val, String mapping);

例如:

String mapping = "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler";
boolean success = userService.lambdaUpdate() .eq(User::getUserPhone, userPhone)
                    .set(User::getUserAddress, userAddress, mapping)
                    .update();

自带的updateById(),saveOrUpdate()等方法则不需要

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容