mybatis 和 jsonb 字段交互直接配置自定义映射,如果是 mybatis-plus 直接在实体类中使用注解
mybatis交互实现
- mybatis配置自定义映射(设置当前 msg_info 查出来以后映射成json格式的数据)
- 实体类关联自定义映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wang.mapper.TestMapper">
<resultMap id="ListenInfoMap" type="com.wang.entity.ListenInfo">
//这里配置查询的时候 msg_info 字段的映射
<result column="msg_info" javaType="com.alibaba.fastjson.JSONObject" property="msgInfo" typeHandler = "com.amap.klun.handler.JacksonTypeHandler"></result>
</resultMap>
</mapper>
package com.amap.klun.entity;
import com.alibaba.fastjson.JSONObject;
import com.amap.qinling.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
/**
*/
@Data
@Accessors(chain = true)
@TableName(resultMap = "ListenInfoMap")
public class ListenInfo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "消息内容", required = true)
//这里配置了,新增的时候直接以JOSN数据插入到数据库
@TableField(value = "msg_info",el = "msgInfo,typeHandler = com.amap.klun.handler.JacksonTypeHandler")
@NotEmpty(message = "消息内容不能为空")
private JSONObject msgInfo;
}
mybatis-plus 的实现,只需要配置实体类,注意mybatis-plus版本过低,会导致有的注解的属性可能会不存在
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
主要配置
autoResultMap = true
implements Serializable
@TableField(typeHandler = FastjsonTypeHandler.class)
*/
@Data
//配置自动映射 autoResultMap = true
@TableName(value = "history",autoResultMap = true)
public class History implements Serializable {
@TableId(type = IdType.AUTO)
@TableField("id")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/**
* 旧值
*这里跟autoResultMap配合实现直接查询出JSON数据,而这个typeHandler配置直接可以让当前字段以JSON格式插入
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject oldValue;
/**
* 新值
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject newValue;
}