Mybatis中一條SQL使用兩個foreach的問題及解決
一條SQL使用兩個foreach的問題
未修改前的 SQL 語句
<select id="findQuestionType_3_correct" resultType="map"> SELECT q.`id`, q.`questionContent`, GROUP_CONCAT(o.`questionOption`) AS questionOptionList FROM `exam_question` q INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId` WHERE q.`id` IN <foreach item="ids_1" collection="array" open="(" separator="," close=")" > #{ids_1} </foreach> AND q.`questionType` = 3 AND o.`correct` = 1 GROUP BY FIELD(q.`id`, <foreach item="ids_2" collection="array" separator="," > #{ids_2} </foreach> ) </select>
這里注意一個點,我兩個 foreach 的 collection 參數都是:array;
這在只有一個 foreach 的情況下,代碼是能跑通的,沒錯我后臺給的參數是一個 int[];
因為業(yè)務需求,我又加了一個 foreach,同樣, collection 參數給的還是:array;
但是,運行時代碼就報錯了,
報錯如下
???啥情況,四個參數???我只給了兩個參數?。。縎QL 兩個參數,Dao 層我也沒給 4 個啊
這個 array 參數是個什么鬼?
最后,差不多邊查邊改了兩個多小時,發(fā)現問題;
將 foreach 的 collection 參數值分別改為對應的 ids_1 和 ids_2,即可;
代碼如下:
<select id="findQuestionType_3_correct" resultType="map"> SELECT q.`id`, q.`questionContent`, GROUP_CONCAT(o.`questionOption`) AS questionOptionList FROM `exam_question` q INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId` WHERE q.`id` IN <foreach item="ids_1" collection="ids_1" open="(" separator="," close=")" > #{ids_1} </foreach> AND q.`questionType` = 3 AND o.`correct` = 1 GROUP BY FIELD(q.`id`, <foreach item="ids_2" collection="ids_2" separator="," > #{ids_2} </foreach> ) </select>
跑是跑通了,但是這樣只是 知其然不知其所以然,于是我在網上查閱了下資料,果然:
當查詢有多個參數時,foreach 的 collection 屬性可以指定名稱;
查閱文章為:Mybatis List列表In查詢實現的注意事項
foreach執(zhí)行多條sql報錯的解決
今天在用mybatis執(zhí)行foreach更新操作時報了奇怪的錯誤.sql語句是沒有任何問題的.sql拿出來直接能運行.但是mybatis就是不能運行.
而我傳遞一條數據的話mybatis能運行,但是兩條以上數據就會報錯
后來發(fā)現是mysql不支持執(zhí)行多條sql語句.為此需要再數據源后面加上一句話.就可以執(zhí)行多條sql了
&allowMultiQueries=true
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 基于mybatis注解動態(tài)sql中foreach工具的方法
- mybatis 查詢sql中in條件用法詳解(foreach)
- Mybatis動態(tài)SQL foreach標簽用法實例
- MyBatis動態(tài)SQL foreach標簽實現批量插入的方法示例
- mybatis foreach批量插入數據:Oracle與MySQL區(qū)別介紹
- Mybatis中動態(tài)SQL,if,where,foreach的使用教程詳解
- Mybatis動態(tài)SQL之if、choose、where、set、trim、foreach標記實例詳解
- Mybatis動態(tài)SQL?foreach批量操作方法
相關文章
如何在IDEA中對 hashCode()和 equals() 利用快捷鍵快速進行方法重寫
這篇文章主要介紹了如何在IDEA中對 hashCode()和 equals() 利用快捷鍵快速進行方法重寫,需要的朋友可以參考下2020-08-08