记录一下最近做的springboot+mabatis+maven架构的项目中Mysql+json数据转换查询解决的办法

7 篇文章 0 订阅

1.使用前端application/json数据映射到后端实体类(注解@requestbody);
2.传参中带json数据类,定义对应实体类中jsonobject和jsonarray对象;
3.实体类对应数据库表数据类型为json型;
那么问题来了,如何实现MySQL数据json数据的模糊查询,查MySQL文档https://dev.mysql.com/doc/refman/5.7/en/json.html?tdsourcetag=s_pcqq_aiomsg找到跳到 Searching and Modifying JSON Values 去查看文档,如下:
图片学习相应的例子,发现用在mybatis映射文件里好像无法识别,在navicat上也执行不了这种写法(有大神,请指教):

SELECT count(*) FROM pb_user WHERE group_id = 12 and levels like CONCAT(’"%’,JSON_EXTRACT(’[1]’, ‘$[0]’),’%"’)
执行不了,但是分开查就可以比如
先获取模糊查询的字符:

SELECT CONCAT(’"%’,JSON_EXTRACT(’[1]’, ‘$[0]’),’%"’);
–>输出 “%1%”

然后再查:

SELECT count(*) FROM pb_user WHERE group_id = 12 and levels like "%1%"

就能正确查询,所以就放弃这个方法了

4.所以想了另一个办法,直接在mapper文件中使用foreach,如下:
< foreach collection=“content.levels” item=“id” separator=" ">
< ![CDATA[
and levels like ‘%${id}%’
]]>
< /foreach>
5.这也是一种方法,可以用了,就可以了(levels是jsonarray的,jsonobject还没有说要模糊查询就先不管了);
6.有大神做个吗,请指教。

最近又由于考虑到like搜索效率不高,即使是优化了搜索条件顺序,但这种搜索仍不能是最好的,因此居然MySQL提供json数据类型就会提供相应的功能函数,效率肯定比自己写的高,因此做出如下修改:
对该JSONArray字段级别levels进行查询:

and JSON_CONTAINS(levels <![CDATA[->]]> ‘$[*]’,#{content.levels})

注:技术交流QQ群-595892258

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Retank

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值