Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題
foreach拼接字符串查詢無數(shù)據(jù)返回
Mybatis-plus xml使用foreach遍歷查詢條件,填充IN函數(shù)時,查詢不到數(shù)據(jù)
入?yún)?List<String>[A,B,C,D,E,F]
?WHERE sku_code IN ?<foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")" ? ? ? ? ? separator=","> ? ? ?#{skuCode} ?</foreach>
以上代碼在迭代器中,給IN函數(shù)賦值的時候,使用的是#{ }占位符號,最后解析出的sql是:
WHERE sku_code IN (A,B,C,D,E,F)不符合IN函數(shù)填充查詢格式。
兩種解決方式
1、將入?yún)⑻幚頌椋?String ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,然后使用占位符 WHERE sku_code IN (#{}) 直接填充
2、入?yún)⑻幚頌椋篖ist [ ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’],使用迭代器+拼接符${}
入?yún)?List<String> [ 'A','B','C','D','E','F']
?WHERE sku_code IN ?<foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")" ? ? ? ? ? separator=","> ? ? ?${skuCode} ?</foreach>
Mybatis-plus #{} 占位符,${}拼接符,在sql解析的時是有區(qū)別的
精講#{}和${}的區(qū)別是什么?
經(jīng)常碰到這樣的面試題目:#{}和${}的區(qū)別是什么?
網(wǎng)上的答案是:
#{}是預(yù)編譯處理,${}是字符串替換。mybatis在處理#{}時,會將sql中的#{}替換為?號,調(diào)用PreparedStatement的set方法來賦值;mybatis在處理${}時,就是把${}替換成變量的值。使用#{}可以有效的防止SQL注入,提高系統(tǒng)安全性。
對于這個問題我感覺要抓住兩點
(1)$符號一般用來當作占位符,常使用Linux腳本的人應(yīng)該對此有更深的體會吧。既然是占位符,當然就是被用來替換的。知道了這點就能很容易區(qū)分$和#,從而不容易記錯了。
(2)預(yù)編譯的機制。預(yù)編譯是提前對SQL語句進行預(yù)編譯,而其后注入的參數(shù)將不會再進行SQL編譯。我們知道,SQL注入是發(fā)生在編譯的過程中,因為惡意注入了某些特殊字符,最后被編譯成了惡意的執(zhí)行操作。而預(yù)編譯機制則可以很好的防止SQL注入。
最后想說的是,對于mybatis以及sql而言,每一個考點背后都是有一個深刻的思想存在的,應(yīng)該好好的體會。這樣才能真正的做到技術(shù)提升,成為技術(shù)大牛。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IntelliJ IDEA修改內(nèi)存大小,使得idea運行更流暢
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA修改內(nèi)存大小,使得idea運行更流暢的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10比較Java數(shù)組和各種List的性能小結(jié)
這篇文章主要是分別對Java數(shù)組、ArrayList、LinkedList和Vector進行隨機訪問和迭代等操作,并比較這種集合的性能。有需要的可以參考借鑒。2016-08-08關(guān)于springboot響應(yīng)式編程整合webFlux的問題
在springboot2.x版本中提供了webFlux依賴模塊,該模塊有兩種模型實現(xiàn):一種是基于功能性端點的方式,另一種是基于SpringMVC注解方式,今天通過本文給大家介紹springboot響應(yīng)式編程整合webFlux的問題,感興趣的朋友一起看看吧2022-01-01使用java web 在jsp文件及Class中連接MySQL和SQLserver 的驅(qū)動方法
這篇文章主要介紹了使用java web 在jsp文件及Class中連接MySQL和SQLserver的驅(qū)動方法的相關(guān)資料,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-10-10SpringBoot實現(xiàn)application.yml文件敏感信息加密
本文主要介紹了SpringBoot實現(xiàn)application.yml文件敏感信息加密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07