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ù)組中查詢是否包含某個特定元素
注意 ,字符串必須使用單引號+雙引號
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í)體類上要加上自動映射
@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ù)庫操作方法時,就可以自動映射了。自己寫的方法或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>
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring容器-BeanFactory和ApplicationContext使用詳解
這篇文章主要為大家介紹了Spring容器-BeanFactory和ApplicationContext的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Spring標(biāo)準(zhǔn)的xml文件頭實(shí)例分析
這篇文章主要介紹了Spring標(biāo)準(zhǔn)的xml文件頭實(shí)例分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11基于Pinpoint對SpringCloud微服務(wù)項(xiàng)目實(shí)現(xiàn)全鏈路監(jiān)控的問題
這篇文章主要介紹了基于Pinpoint對SpringCloud微服務(wù)項(xiàng)目實(shí)現(xiàn)全鏈路監(jiān)控的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Spring Boot 中實(shí)現(xiàn)跨域的多種方式小結(jié)
Spring Boot提供了多種方式來實(shí)現(xiàn)跨域請求,開發(fā)者可以根據(jù)具體需求選擇適合的方法,在配置時,要確保不僅考慮安全性,還要兼顧應(yīng)用的靈活性和性能,本文給大家介紹Spring Boot 中實(shí)現(xiàn)跨域的多種方式,感興趣的朋友一起看看吧2024-01-01