1. 背景介绍
项目框架使用的是spring boot+mybatisplus等构建,现在接口需求是通过标签(label)匹配相应
的作品,这里production里存的是label的多个id集合,Mysql数据格式为json格式,存储格式如下:

现在接口需求是通过前端传过来的id数据进行对label的多对多匹配。
2. 难点
由于是多对多匹配,所以在xml中先进行数组转list后对list的遍历,然后通过MYSQL JSON函数(主要用到这两个方法:JSON_CONTAINS(tags, '["xxx"]');和JSON_EXTRACT())
JSON_CONTAINS(tags, '["xxx"]'); 查找目标中是否包含xxx
JSON_EXTRACT(目标json字段,"\$.name");是JSON提取函数,$.name 指json数据中的key值(通过key提取目标json中的value)

3.疑点
一开始是遇到这个问题:用短字符串可以匹配到数据,字符串太长就没数据。

接下来找到问题所在是因为数据拼接的问题:


解决办法:
这里出现该问题的原因应该就是这个sql拼接的问题,由于传进来的是遍历过后的单值,所以这里参数就不需要加“[]”了,直接用json_contains()方法以单个字符串的形式进行匹配。

这样就避免了json_contains()参数传“拼接的数组”出现查不到数据的问题了,至于这个拼接个人后期还有待研究哪里出问题了。
网友评论