1. 背景介紹
項目框架使用的是spring boot+mybatisplus等構(gòu)建扮宠,現(xiàn)在接口需求是通過標(biāo)簽(label)匹配相應(yīng)
的作品氧猬,這里production里存的是label的多個id集合荷愕,Mysql數(shù)據(jù)格式為json格式,存儲格式如下:
production表中l(wèi)abel字段
現(xiàn)在接口需求是通過前端傳過來的id數(shù)據(jù)進行對label的多對多匹配额获。
2. 難點
由于是多對多匹配装畅,所以在xml中先進行數(shù)組轉(zhuǎn)list后對list的遍歷,然后通過MYSQL JSON函數(shù)(主要用到這兩個方法:JSON_CONTAINS(tags, '["xxx"]');和JSON_EXTRACT())
JSON_CONTAINS(tags, '["xxx"]'); 查找目標(biāo)中是否包含xxx
JSON_EXTRACT(目標(biāo)json字段点额,"\$.name");是JSON提取函數(shù)舔株,$.name 指json數(shù)據(jù)中的key值(通過key提取目標(biāo)json中的value)
xml中針對標(biāo)簽字段多對多查詢語句
3.疑點
一開始是遇到這個問題:用短字符串可以匹配到數(shù)據(jù),字符串太長就沒數(shù)據(jù)还棱。
兩次查詢結(jié)果不同载慈,total應(yīng)該都為1的
接下來找到問題所在是因為數(shù)據(jù)拼接的問題:
這是xml里定義的轉(zhuǎn)換后的sql語句
去掉拼接,直接加參數(shù)珍手,這樣是有數(shù)據(jù)的
解決辦法:
這里出現(xiàn)該問題的原因應(yīng)該就是這個sql拼接的問題办铡,由于傳進來的是遍歷過后的單值,所以這里參數(shù)就不需要加“[]”了琳要,直接用json_contains()方法以單個字符串的形式進行匹配寡具。
json_contains()不傳數(shù)組類型參數(shù)
這樣就避免了json_contains()參數(shù)傳“拼接的數(shù)組”出現(xiàn)查不到數(shù)據(jù)的問題了,至于這個拼接個人后期還有待研究哪里出問題了稚补。