Mybatis中一条SQL使用两个foreach的问题及解决

网友投稿 1178 2022-11-01

Mybatis中一条SQL使用两个foreach的问题及解决

Mybatis中一条SQL使用两个foreach的问题及解决

目录一条SQL使用两个foreach的问题未修改前的 SQL 语句报错如下foreach执行多条sql报错的解决&allowMultiQueries=true

一条SQL使用两个foreach的问题

未修改前的 SQL 语句

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

#{ids_1}

AND q.`questionType` = 3 AND o.`correct` = 1

GROUP BY FIELD(q.`id`,

#{ids_2}

)

这里注意一个点,我两个 foreach 的 collection 参数都是:array;

这在只有一个 foreach 的情况下,代码是能跑通的,没错我后台给的参数是一个 int[];

因为业务需求,我又加了一个 foreach,同样, collection 参数给的还是:array;

但是,运行时代码就报错了,

报错如下

???啥情况,四个参数???我只给了两个参数啊!?SQL 两个参数,Dao 层我也没给 4 个啊

这个 array 参数是个什么鬼?

最后,差不多边查边改了两个多小时,发现问题;

将 foreach 的 collection 参数值分别改为对应的 ids_1 和 ids_2,即可;

代码如下:

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

#{ids_1}

AND q.`questionType` = 3 AND o.`correct` = 1

GROUP BY FIELD(q.`id`,

#{ids_2}

)

跑是跑通了,nNvRP但是这样只是 知其然不知其所以然,于是我在网上查阅了下资料,果然:

当查询有多个参数时,foreach 的 collection 属性可以指定名称;

查阅文章为:Mybatis List列表In查询实现的注意事项

foreach执行多条sql报错的解决

今天在用mybatis执行foreach更新操作时报了奇怪的错误.sql语句是没有任何问题的.sql拿出来直接能运行.但是mybatis就是不能运行.

而我传递一条数据的话mybatis能运行,但是两条以上数据就会报错

后来发现是mysql不支持执行多条sql语句.为此需要再数据源后面加上一句话.就可以执行多条sql了

&allowMultiQueries=true

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
下一篇:TF-IDF算法抽取中文内容的主题关键词
相关文章

 发表评论

暂时没有评论,来抢沙发吧~