mybatis-plus 如何操作json字段
1. 演示表格準(zhǔn)備
demo表
CREATE TABLE `demo` ( ? `id` bigint NOT NULL AUTO_INCREMENT, ? `tag` json DEFAULT NULL, ? PRIMARY KEY (`id`) )
數(shù)據(jù):
| id | tag |
|---|---|
| 1 | [3, 4, 5] |
| 2 | [“abc”] |
| 3 | [“a”, “b”, “c”] |
2. SQL操作JSON
2.1.精確查詢
從數(shù)組中查詢是否包含某個(gè)特定元素
注意 ,字符串必須使用單引號(hào)+雙引號(hào)
select * from demo where json_contains(tag,'"a"'); id|tag ? ? ? ? ? ?| --+---------------+ ?3|["a", "b", "c"]|
2.2.模糊查詢
select json_search(‘{“a”:“xyzf”,“b”:{“c”:“sdf”}}',‘a(chǎn)ll',‘%f%')
select * from doc where json_search(tag,‘a(chǎn)ll',‘%d%')其他的不再贅述
3.mybatis-plus中操作JSON字段
3.1自帶方法的JSON處理
實(shí)體類上要加上自動(dòng)映射
@TableName(value="doc",autoResultMap = true)
json字段上加上json處理器
@TableName(value="doc",autoResultMap = true)
public class Doc{
?? ?@TableField(value="tag",typeHandler = FastjsonTypeHandler.class)
? ? private Set<String> tag;
} ??這樣,使用mybatis-plus自帶的數(shù)據(jù)庫(kù)操作方法時(shí),就可以自動(dòng)映射了。自己寫(xiě)的方法或SQL不管用。
3.2 QueryWrapper查詢的JSON處理
數(shù)組模糊查詢,模糊查詢tag字段數(shù)組中是否有指定的值。
QueryWrapper<Doc> wrapper = new QueryWrapper<>();
wrapper.isNotNull("json_search(tag,'all',concat('%','" + param.getTag() + "','%'))");3.3 自定義SQL操作
查詢結(jié)果需要自定義映射,json字段需要使用typeHandler。
<resultMap id="resourceMap" type="com.demo.common.params.response.Resource" autoMapping="true" >
? ? <result column="tag" jdbcType="JAVA_OBJECT" property="tag" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" javaType="java.util.ArrayList"/>
</resultMap>
<select id="pageOfSearchKey" resultMap="resourceMap"
? ? ? ? ? ? parameterType="com.demo.common.params.request.doc.DocPageParam">
?? ?select * from doc where json_search(tag,'all',concat('%',#{param.searchKey},'%'))
</select>新增JSON中的元素,若已存在則不新增
<update id="addTag" parameterType="com.demo.common.params.request.doc.DocTagParam">
? ? update doc set tag =json_Array_append(tag,'$',#{param.tag}) , update_time=update_time
? ? where
? ? doc_no in
? ? <foreach collection="param.docNoList" item="docNo" open="(" separator="," close=")">
? ? ? ? #{docNo}
? ? </foreach>
? ? and !JSON_CONTAINS(tag,concat('"',#{param.tag},'"'))
</update>刪除JSON中的元素,刪除已存在的元素,元素不存在則不刪除
? ? <update id="removeTag">
? ? ? ? UPDATE doc SET tag = JSON_REMOVE(tag, JSON_UNQUOTE(JSON_SEARCH(tag, 'all', #{param.tag}))) WHERE
? ? ? ? JSON_SEARCH(tag, 'all',#{param.tag})
? ? ? ? and doc_no in
? ? ? ? <foreach collection="param.docNoList" item="docNo" open="(" separator="," close=")">
? ? ? ? ? ? #{docNo}
? ? ? ? </foreach>
? ? </update>以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis學(xué)習(xí)教程(七)-Mybatis緩存介紹
MyBatis緩存分為一級(jí)緩存和二級(jí)緩存一級(jí)緩存,本文給大家介紹mybatis緩存知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
Java連接MySQL數(shù)據(jù)庫(kù)增刪改查的通用方法(推薦)
下面小編就為大家?guī)?lái)一篇Java連接MySQL數(shù)據(jù)庫(kù)增刪改查的通用方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Java基于注解實(shí)現(xiàn)的鎖實(shí)例解析
這篇文章主要介紹了Java基于注解實(shí)現(xiàn)的鎖實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時(shí)遇到的結(jié)點(diǎn)為空的問(wèn)題詳解
這篇文章主要介紹了Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時(shí)遇到的結(jié)點(diǎn)為空的問(wèn)題及解決辦法,需要的朋友們可以學(xué)習(xí)下。2019-09-09
Struts2中validate數(shù)據(jù)校驗(yàn)的兩種方法詳解附Struts2常用校驗(yàn)器
這篇文章主要介紹了Struts2中validate數(shù)據(jù)校驗(yàn)的兩種方法及Struts2常用校驗(yàn)器,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
Spring Security登錄添加驗(yàn)證碼的實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Spring Security登錄添加驗(yàn)證碼的實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用詳解
這篇文章主要介紹了MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

