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>



目录
相关文章
|
3月前
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
10天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 动态SQL
文章详细介绍了Mybatis中的动态SQL用法,包括`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`和`<foreach>`等元素的应用,并通过实际代码示例展示了如何根据不同条件动态生成SQL语句。
|
3月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
89 3