JSON字段基本操作

Posted mengdie1978

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON字段基本操作相关的知识,希望对你有一定的参考价值。

CREATE TABLE `t` (  
    `id` INT UNSIGNED NOT NULL,
    `js` JSON NOT NULL,
    PRIMARY KEY (`id`)
);

    "num": 1,  
    "name": "abc",  
    "age": 16,  
    "newNum": 123,  
    "class":    
       "one": 
          "num": 1
        ,                                                                                                                          
       "tow": 
          "num": 2
        ,  
       "three": 
          "num": 3
        
     
 
insert into t values(1,\'"num":1,"name":"abc"\')
update t set js=json_set(\'"num":1,"name":"abc"\',\'$.num\',2,\'$.age\',16,\'$.class.id\',1) where id=1

结果js="num":2,"name":"abc","age":16
黑马视频库:
Python全套教程
网盘链接:https://pan.baidu.com/s/1NvpLg7VFpyb3UXqBJYPniQ
提取码:g1tw

 

mybatis-plus 操作json字段

mybatis-plus 操作json字段

1. 演示表格准备

demo表

CREATE TABLE `demo` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `tag` json DEFAULT NULL,
  PRIMARY KEY (`id`)
)

数据:

idtag
1[3, 4, 5]
2[“abc”]
3[“a”, “b”, “c”]

2. SQL操作JSON

2.1.精确查询

从数组中查询是否包含某个特定元素
注意 ,字符串必须使用单引号+双引号

select * from demo where json_contains(tag,'"a"');
id|tag            |
--+---------------+
 3|["a", "b", "c"]|

2.2.模糊查询

select json_search(‘“a”:“xyzf”,“b”:“c”:“sdf”’,‘all’,‘%f%’)

select * from doc where json_search(tag,‘all’,‘%d%’)

其他的不再赘述

3.mybatis-plus中操作JSON字段

3.1自带方法的JSON处理

实体类上要加上自动映射

@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自带的数据库操作方法时,就可以自动映射了。自己写的方法或SQL不管用。

3.2 QueryWrapper查询的JSON处理

数组模糊查询,模糊查询tag字段数组中是否有指定的值。

QueryWrapper<Doc> wrapper = new QueryWrapper<>();
wrapper.isNotNull("json_search(tag,'all',concat('%','" + param.getTag() + "','%'))");

3.3 自定义SQL操作

查询结果需要自定义映射,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>

以上是关于JSON字段基本操作的主要内容,如果未能解决你的问题,请参考以下文章

mybatis-plus 操作json字段

mysql数据库中某个字段存的是json数据,如何对json数据中的数据进行操作?

JSON字段基本操作

mysql 5.7 json类型字段操作

PostgreSQL JSON类型字段常用操作

PostgreSQL JSON类型字段常用操作