广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatis中一条SQL使用两个foreach的问题及解决
  • 924
分享到

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

2024-04-02 19:04:59 924人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

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

一条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[];

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

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

报错如下

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

这个 array 参数是个什么鬼?

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

将 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执行多条sql报错的解决

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

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

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

&allowMultiQueries=true

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

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

本文链接: https://www.lsjlt.com/news/138384.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作