Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis做批量删除时写SQL语句时遇到的问题

mybatis做批量删除时写SQL语句时遇到的问题

作者头像
宁在春
发布于 2022-10-31 06:05:08
发布于 2022-10-31 06:05:08
97600
代码可运行
举报
运行总次数:0
代码可运行

我一开始想法很简单就是用where id in (这里用foreach遍历出来) 语句来完成。 这个想法是正确的,但是我踩了不知道多少个坑才写出来。

一、mapper层

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	/*
     * 根据新闻id删除评论
     * @Param
     * @return
     **/
int deleteCommentByNewsId(ArrayList<Integer> newsIds);

二、mybatis写的sql语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <delete id="deleteCommentByNewsId">
        delete from comment where news_id
        in
        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
            #{newsId}
        </foreach>
    </delete>

collection 这里一开始写的 list 然后遍历的里面写的 #{newsId}

然后果不其然就报错一堆。 给我来了一个这样的错误…

然后我还不知道悔改,粗略看了网上讲的 collection 里面填什么。(细心很重要,找bug要有耐心)

因为我的是 ArrayList ,就填了一个 list 进去 错了之后我还试过网上讲的array 都错了 就不贴出来啦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <delete id="deleteCommentByNewsId">
        delete from comment where news_id
        in
        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
            #{newsId}
        </foreach>
    </delete>

尽量保持平静中(实则心中各种草泥马在奔跑)

然后继续找大佬博客。最后的最后 我终于学会啦。

collection 里面填的是 参数名。 心里苦啊。

最后的语句是这样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <delete id="deleteCommentByNewsId">
            delete from comment where news_id
            in
            <foreach collection="newsIds" item="id" index="index" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </delete>

三、详解 foreach 标签及其属性

最后来总结一下这个 foreach。

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。

这就是我所知道的一点点东西。希望能够对大家有帮助。

四、自言自语

许多知识学的不踏实,并且不去用,又不去复习,我想它是真的会慢慢就离开我们的。

学以致用。

温故而知新。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【mybatis之批量更新】
MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。
用户5640963
2019/07/26
1.7K0
Mybatis中的动态sql语句 if标签 where标签 foreach标签 sql标签
传入多个 id 查询用户信息,用下边两个 sql 实现: SELECT * FROM USERS WHERE username LIKE ‘%张%’ AND (id =10 OR id =89 OR id=16)
韦恩少爷的背
2020/02/24
5.6K0
Mybatis批量操作解析
我们在项目中会有一些批量操作的场景,比如导入文件批量处理数据的情况(批量新增商户、批量修改商户信息),当数据量非常大,比如超过几万条的时候,在Java代码中循环发送SQL到数据库执行肯定是不现实的,因为这个意味着要跟数据库创建几万次会话。即使在同一个连接中,也有重复编译和执行SQL的开销。 例如循环插入10000条(大约耗时3秒钟)∶
向着百万年薪努力的小赵
2022/12/02
1K0
Mybatis批量操作解析
Mybatis批量操作
Mybatis常会出现批量操作,如批量查询,批量插入,批量修改(replace into)。批量操作要比循环执行效率提升很多,这里对mybatis的批量操作做一个总结讲解。
逝兮诚
2019/10/30
2.4K0
Mybatisd对MySQL批量插入、批量更新及批量删除语句
#{item.name,jdbcType=VARCHAR},
BUG弄潮儿
2022/06/30
3.6K0
深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中,<foreach>标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。本文将带您深入探索MyBatis中的<foreach>标签,揭示其背后的原理和用法。
修己xj
2023/08/25
1.4K0
深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
MyBatis动态SQL
传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。MyBatis的动态SQL功能正是为了解决这种问题, 其通过 if、choose、when、otherwise、trim、where、set、foreach和bind等9种标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率。
用户10358987
2024/04/23
1710
MyBatis处理批量删除
MyBatis是一种流行的Java持久化框架,提供了许多方便的操作数据库的功能。在许多场景下,我们需要执行批量删除操作,以便更快地删除大量数据。
堕落飞鸟
2023/05/15
3.7K0
mybatis.5.动态SQL
1.动态SQL,解决关联sql字符串的问题,mybatis的动态sql基于OGNL表达式
张哥编程
2024/12/17
1190
MyBatis配置动态SQL语句
在 MyBatis 的 SQL映射文件中,有时候需要根据一些查询条件,来选择不同的SQL语句,如果每一个场景都重写SQL,很显然效率没有很高,而 MyBatis 的动态SQL很好的解决了这种问题,根据条件动态的处理 SQL, 特别简单的说就是,写一次SQL,但是根据分支等的跳转,在多个场景下也可以使用,例如:
BWH_Steven
2020/02/20
9170
mybatis使用in语句,拼接逗号的使用、拼接sql语句实现批量插入、批量更新的案例处理
里面的变量,ids代表是一个list的string类型的,id代表循环里面的自定义变量。and business_id代表的是查询语句里面的sql语句。
小马哥学JAVA
2023/02/01
2.7K0
Mybatis插入/删除批处理
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
7110
MyBatis 如何构造动态 SQL 语句
  以前看过一个本书叫《深入浅出 MFC 》,台湾 C++ 大师写的一本书。在该书中写道这样一句话,“勿在浮沙筑高台”,这句话写的的确对啊。编程很多语言虽然相同,但是真正做还是需要认真的学习,如果只是想着按想像着来,真的是会走很多弯路,浪费很多时间。
星哥玩云
2022/08/16
6150
干货 | MyBatis的动态SQL
本文主要根据自己demo案例,详细介绍动态SQL的使用。基于官网,但比官网更详细。
子乾建建-Jeff
2020/06/29
1K0
干货 | MyBatis的动态SQL
MyBatis 构造动态 SQL 语句
  以前看过一个本书叫《深入浅出 MFC》,台湾 C++ 大师写的一本书。在该书中写到这样一句话,“勿在浮沙筑高台”,这句话写的的确对啊。编程很多语言虽然相通,但是真正做还是需要认真的学习,如果只是想着按想像着来,真的是会走很多弯路,浪费很多时间。
码农UP2U
2020/08/26
7280
Mybatis 中 foreach 用法
●item:表示集合中每一个元素进行迭代时的别名, ●index:指 定一个名字,用于表示在迭代过程中,每次迭代到的位置, ●open:表示该语句以什么开始, ●separator:表示在每次进行迭代之间以什么符号作为分隔 符, ●close:表示以什么结束。
赵哥窟
2018/12/13
2.1K0
MyBatis——动态SQL总结
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。 MyBatis中用于实现动态SQL的元素主要有:
全栈程序员站长
2022/09/09
7090
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis
Arebirth
2019/09/24
2.9K0
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
Mybatis:动态sql
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
冷环渊
2021/10/19
6430
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis
星哥玩云
2022/08/18
3.6K0
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
相关推荐
【mybatis之批量更新】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验