文章目录
- 背景
- 实现方式
- 1. 直接以 Json 对象保存到数据库
- 2. 以 String 类型保存到数据库
背景
项目过程中可能需要保存 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
,