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查询实现的注意事项

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值