背景
项目过程中可能需要保存 Json 对象到数据库中。
实现方式
有两种实现方式,一种是直接保存 Json 对象到数据库,这种方式在创建实体类以及编写 Mapper XML 脚本时需要对 Json 对象做格式转换,另一种是直接以字符串保存,取用时使用
JSONObject
解析为 Json 对象。
1. 直接以 Json 对象保存到数据库
- 创建实体类时,类上加
@TableName
注解,autoResultMap
参数设为 true; - 要保存为 Json 格式的字段设置为
JSONObject
类型,添加@TableField
注解,typeHandler
参数设置为JacksonTypeHandler.class
。
如下
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
@TableName(value = "query_condition", autoResultMap=true)
public class QueryConditionDAO {
@TableField(value = "queryCondition", typeHandler = JacksonTypeHandler.class)
private JSONObject queryCondition;
}
然后在编写 Mapper XML 脚本时,insert
和 update
语句中需要对 Json 属性的字段设置 typeHandler
和 jdbcType
,如下
<update id="updateQueryCondition">
update ${
tableName}
set `query_condition`=#{
queryCondition, jdbcType=OTHER, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler}
where `id`=#{
id}
</update>
2. 以 String 类型保存到数据库
以字符串类型保存很简单,如下
public class QueryConditionDAO {
private String queryCondition;
}
在查询数据时,通过 JSONObject.parseObject()
方法将字符串解析为 JSONObject
类型即可。
JSONObject queryCondition = JSONObject.parseObject(queryConditionString);
小贴士
通常要保存一个 Json 字符串的话,一般都是比较大的数据,CHAR
和VARCHAR
类型是不够的,而需要用TEXT
类型来存储。要根据具体的数据量的大小决定使用TEXT
还是MEDIUMTEXT
或者是LONGTEXT
,