Mybatis中一條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>

這裏注意一個點,我兩個 foreachcollection 參數都是:array
這在只有一個 foreach 的情況下,代碼是能跑通的,沒錯我後臺給的參數是一個 int[]
因爲業務需求,我又加了一個 foreach,同樣, collection 參數給的還是:array
但是,運行時代碼就報錯了,報錯如下:
報錯
???啥情況,四個參數???我只給了兩個參數啊!?SQL 兩個參數,Dao 層我也沒給 4 個啊
Dao層
這個 array 參數是個什麼鬼?

最後,差不多邊查邊改了兩個多小時,發現問題;
foreachcollection 參數值分別改爲對應的 ids_1ids_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>

跑是跑通了,但是這樣只是 知其然不知其所以然,於是我在網上查閱了下資料,果然:
當查詢有多個參數時,foreachcollection 屬性可以指定名稱;
查閱文章爲:Mybatis List列表In查詢實現的注意事項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章