定制开发小程序mybatis-plus 操作json字段

操作json字段

1. 定制开发小程序演示表格准备

demo表

CREATE TABLE `demo` (  `id` bigint NOT NULL AUTO_INCREMENT,  `tag` json DEFAULT NULL,  PRIMARY KEY (`id`))
  • 1
  • 2
  • 3
  • 4
  • 5

数据:

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"]|
  • 1
  • 2
  • 3
  • 4

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)
  • 1

json字段上加上json处理器

@TableName(value="doc",autoResultMap = true)public class Doc{	@TableField(value="tag",typeHandler = FastjsonTypeHandler.class)    private Set<String> tag;}   
  • 1
  • 2
  • 3
  • 4
  • 5

这样,使用mybatis-plus自带的数据库操作方法时,就可以自动映射了。自己写的方法或SQL不管用。

3.2 查询的JSON处理

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

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

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

新增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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

删除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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发