Mybatis的foreach实现批量删除sql写法(上)

简介: Mybatis的foreach实现批量删除sql写法

foreach可以在SQL语句中通过拼接的方式进行集合迭代。foreach元素的属性主要有collection,item,index,separator,open,close。


        1.  item属性:表示循环体中的具体对象,即集合中每一个元素进行迭代时的别名。

       具体说明:item支持属性的点路径访问,如item.age,item.info.details。在list和数组中是其中的对象,在map中是value。该参数为必选。


       2.  index属性:指定一个名字,用于表示在迭代过程中,每次迭代到的位置。

       具体说明:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。


       3.  separator属性:表示在每次进行迭代之间以什么符号作为分隔符。

       具体说明:例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。


       4.  open属性:foreach代码的开始符号,表示该语句以什么开始。

       具体说明:一般是"(“和close=”)"合用。常用在in(),values()时。该参数可选。


       5.  close属性:foreach代码的结束符号,表示该语句以什么结束。

       具体说明:一般是")“和open=”("合用。常用在in(),values()时。该参数可选。


       6.  collection属性:foreach传入的对象参数。

       具体说明:该参数必选。在不同情况下,该属性的值是不一样的,主要有一下3种情况:

             a. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list ;

             b. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array ;

             c. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map。实际上在传入参数的时候,框架也会把它封装成一个Map的,map的key就是参数名,这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key。


使用foreach进行批量删除的映射文件示范如下

  1. 常用的批量删除语句: in 语句
    <delete id="deleteByIds"  parameterType="java.util.List">
        delete from STOREROOM_REPERTORY where UUID in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item.uuid}
        </foreach>
    </delete>

2.  遇到 某张表 是联合主键的,批量删除 用 in 就不合适了

解决办法:在 where 后面 用 or 循环拼装

  <delete id="deleteByIds" parameterType="java.util.ArrayList">
    delete from STOREROOM_REPERTORY where
    <foreach collection="list" item="item" index="index" separator="or">
      ( id=#{item.uuid} and month = #{item.month} )
    </foreach>
  </delete>



目录
相关文章
|
5天前
|
JSON Java 数据库连接
MyBatis SQL 返回 resultType="map"
本文深入分析MyBatis中使用Map转VO的常见问题,指出JSON序列化转换方案虽可行但性能差、类型不安全、维护困难。推荐直接使用`resultType=&quot;VO&quot;`或`@Results`映射,提升性能10倍以上,增强可读性与可维护性,杜绝类型丢失风险,是更优的实践方案。
|
30天前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
142 18
|
6月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
5月前
|
SQL Java 数据库连接
MyBatis动态SQL字符串空值判断,这个细节99%的程序员都踩过坑!
本文深入探讨了MyBatis动态SQL中字符串参数判空的常见问题。通过具体案例分析,对比了`name != null and name != &#39;&#39;`与`name != null and name != &#39; &#39;`两种写法的差异,指出后者可能引发逻辑混乱。为避免此类问题,建议在后端对参数进行预处理(如trim去空格),简化MyBatis判断逻辑,提升代码健壮性与可维护性。细节决定成败,严谨处理参数判空是写出高质量代码的关键。
697 0
|
1月前
|
SQL Java 数据库连接
SSM相关问题-1--#{}和${}有什么区别吗?--Mybatis都有哪些动态sql?能简述一下动 态sql的执行原理吗?--Spring支持的几种bean的作用域 Scope
在MyBatis中,`#{}`是预处理占位符,可防止SQL注入,适用于大多数参数传递场景;而`${}`是直接字符串替换,不安全,仅用于动态表名、列名等特殊场景。二者在安全性、性能及使用场景上有显著区别。
57 0
|
4月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
337 5
|
6月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
6月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
7月前
|
SQL XML Java
九、MyBatis动态SQL
九、MyBatis动态SQL
93 2
|
6月前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
173 0