MyBatis中使用foreach循環(huán)的坑及解決
使用foreach循環(huán)的坑
我們首先看一段MyBatis中使用foreach循環(huán)的sql:
SELECT * FROM table where id in
<foreach item="item" collection="ids1" open="(" close=")" index="0" separator=",">
#{item}
</foreach>這段sql執(zhí)行會(huì)添加幾個(gè)占位符,正確寫法foreach寫到一行:
正確寫法為
SELECT * FROM table where id in
<foreach item="item" collection="ids1" open="(" close=")" index="0" separator=",">#{item}</foreach>忽現(xiàn)的Mybatis foreach失效記錄
傳進(jìn)來(lái)的 list 肯定有值得,本身代碼沒(méi)有問(wèn)題。 線上也算跑了大半年了。 而且出現(xiàn)的問(wèn)題時(shí)也只在本機(jī)上.
mybatis.version=3.2.8
代碼:
AND (
? ?<foreach collection="list" open=" id IN (" separator="," close=")" item="id" index="index">
? ? ?#{id}
? ?</foreach>
OR (GRADE In ('0','1')
? ?AND user_type = '5'
?)
)正確結(jié)果應(yīng)該是:
AND ( id IN ('1','2','3')
? OR (GRADE In ('0', '1') AND user_type = '5')
)實(shí)際結(jié)果:
AND (?
? OR (GRADE In ('0', '1') AND user_type = '5')
)造成SQL 執(zhí)行語(yǔ)法錯(cuò)誤.
復(fù)現(xiàn)方式:暫無(wú)復(fù)現(xiàn)方法
解決方案
隨便改了一下Dao.java的一個(gè)文件內(nèi)容(沒(méi)做實(shí)際性的內(nèi)容改動(dòng),ide 重新加載了下Dao). bug就好了. 好了 . 了...
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用FeignClient調(diào)用POST表單Body內(nèi)沒(méi)有參數(shù)問(wèn)題
這篇文章主要介紹了使用FeignClient調(diào)用POST表單Body內(nèi)沒(méi)有參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java中Buffer緩沖區(qū)的ByteBuffer類詳解
這篇文章主要介紹了Java中Buffer緩沖區(qū)的ByteBuffer類詳解,ByteBuffer類是Java NIO庫(kù)中的一個(gè)重要類,用于處理字節(jié)數(shù)據(jù),它提供了一種靈活的方式來(lái)讀取、寫入和操作字節(jié)數(shù)據(jù),ByteBuffer類是一個(gè)抽象類,可以通過(guò)靜態(tài)方法創(chuàng)建不同類型的ByteBuffer對(duì)象,需要的朋友可以參考下2023-10-10
java本機(jī)內(nèi)存分配Native?memory?allocation?mmap失敗問(wèn)題解決
這篇文章主要介紹了java本機(jī)內(nèi)存分配Native?memory?allocation?mmap失敗問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
ThreadPoolExecutor參數(shù)的用法及說(shuō)明
詳解Spring學(xué)習(xí)總結(jié)——Spring實(shí)現(xiàn)AOP的多種方式

