服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Mybatis动态SQL foreach批量操作方法

Mybatis动态SQL foreach批量操作方法

2023-03-21 14:36王卫——David Java教程

这篇文章主要介绍了Mybatis动态SQL foreach批量操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

动态SQL Foreach批量操作

前言

最近正在研究Mybatis的动态SQL,正好学习到了foreach元素。之前也是在项目开发中经常会使用到Mybatis的foreach元素进行批量操作。但是有时候就会使用出错,所以整理和总结了关于使用foreach进行增删改查的方法。通过这篇博客详细对于foreach的使用将会更加熟练和高效。

前置必要知识

在学习Mybatis的foreach之前,我们需要掌握到mysql的批量语句是如何书写的。如果不清楚mysql批量语句怎么书写那么在使用Mybatis的foreach元素进行批量操作就跟无头苍蝇一样,原理很简单,mybatis是一种持久层框架,其中一个作用就是拼接SQL并交给数据库执行SQL,所以在mybatis中我们需要将批量的SQL语句拼接成功,所以就会用到批量操作的SQL怎么书写,然后才是怎么和Mybatis的语法结合。

让我们来看看批量的增删改查SQL语句如何书写和执行结果。

MySQL批量插入

  1. INSERT INTO tar_course_content_info ( id, course_assembly_id, assembly_content, create_time, created_id, created_by, update_time, updated_id, updated_by, is_delete )
  2. VALUES
  3. (
  4. 301906655392563202,
  5. 301906577433034752,
  6. '语文课',
  7. '2022-07-12 19:13:44',
  8. 'EmE6TKu4okhu3qK5M1AGQ4',
  9. '张三',
  10. '2022-07-12 19:13:44',
  11. 'PWeDZyRPADjsdxCNWnSWxZ',
  12. '王五',
  13. 0
  14. ),(
  15. 301906655392563203,
  16. 301906577433034752,
  17. '数学课',
  18. '2022-07-12 19:13:44',
  19. 'EmE6TKu4okhu3qK5M1AGQ4',
  20. '张三',
  21. '2022-07-12 19:13:44',
  22. 'PWeDZyRPADjsdxCNWnSWxZ',
  23. '王五',
  24. 0
  25. )

执行结果 已经受影响的行数为2行

Mybatis动态SQL foreach批量操作方法

MySQL批量查询

使用in关键字,in关键字的作用是查询某个范围内的数据

  1. SELECT * FROM tar_course_content_info WHERE is_delete = 0 AND ( created_by, course_assembly_id ) IN (( '张三', 305107474690605056 ),( '李四', 308290117053710337 ))

执行结果

Mybatis动态SQL foreach批量操作方法

MySQL批量修改

  1. UPDATE tar_course_content_info SET created_by='王五' WHERE course_assembly_id IN( 305107474690605056,308290117053710337)

执行结果 已经受影响的行数为13行

Mybatis动态SQL foreach批量操作方法

MySQL批量删除

  1. DELETE FROM tar_course_content_info where (created_by,id) in (('张三',301906655392563202),('张三',301906655392563203))

执行结果

Mybatis动态SQL foreach批量操作方法

知道mysql的sql语句的批量操作之后,我们再看看在实际项目开发过程中,如何使用mybatis中的foreach进行批量操作。

使用mybatis中的foreach进行批量操作

 

foreach标签的各个属性

collection表示迭代集合的名称 item 表示本次迭代的获取的元素,如果collection为List、Set、或者Array,则表示其中的元素;若collection为may,则表示key-value中的value,该参数为必选 open 表示该语句以什么开始,常用的为左括弧 “(”,mybatis会将该字符串拼接到foreach包裹的sql语句之前,并且只拼接一次,该参数为可选项。 close 表示该语句以什么借宿,常用的为右括弧")",mybatis会将该字符串拼接到foreach包裹的sql语句之后,并且只拼接一次,该参数为可选项。 separator mybatis会在每次迭代后给sql加上separate属性制定的字符,该参数为可选项。 index 在List、Set和Array表示当前迭代的位置,在Map中,index表示key-value中的key,该参数为可选项。 nullable 表示集合是否可以为null,默认为false,当设置为true时集合为null不抛出异常

批量插入

  1. <!--批量插入-->
  2. <insert id="insertBatch">
  3. INSERT INTO tar_course_content_info (
  4. id,
  5. course_assembly_id,
  6. assembly_content,
  7. create_time,
  8. created_id,
  9. created_by,
  10. update_time,
  11. updated_id,
  12. updated_by,
  13. is_delete
  14. ) values
  15. <foreach collection="list" item="item" separator="," >
  16. ( #{item.id},
  17. #{item.courseAssemblyId},
  18. #{item.assemblyContent},
  19. #{item.createTime},
  20. #{item.createdId},
  21. #{item.createdBy},
  22. #{item.updateTime},
  23. #{item.updatedId},
  24. #{item.updatedBy},
  25. #{item.iselete}
  26. )
  27. </foreach>
  28.  
  29. </insert>

执行结果

Mybatis动态SQL foreach批量操作方法

批量查询

  1. <!--根据创建人和课程组件id进行批量查询 -->
  2. <select id="queryAllCourseContentByCreatedByAndCourseAssemblyId" resultMap="courseContentMap">
  3. SELECT *
  4. FROM tar_course_content_info
  5. WhERE
  6. is_delete=0
  7. and
  8. (created_by, course_assembly_id)
  9. in
  10. <foreach collection="list" item="item" open="(" close=")" separator="," nullable="false">
  11. (#{item.createdBy},#{item.courseAssemblyId})
  12. </foreach>
  13.  
  14. </select>

执行结果

Mybatis动态SQL foreach批量操作方法

批量修改

第一种情况是需更新的值相同:

  1. <!-- 根据创建人和内容id进行批量假删除-->
  2. <update id="updateAllByCreatedByAndContentId">
  3. UPDATE tar_course_content_info SET is_delete=1 WHERE (created_by,id) IN
  4.  
  5. <foreach collection="list" item="item" open="(" close=")" separator="," >
  6. (#{item.createdBy},#{item.id})
  7.  
  8. </foreach>
  9.  
  10. </update>

执行结果

Mybatis动态SQL foreach批量操作方法

第二种情况是需更新的值不同: 这里需要注意,需要在连接数据是添加 &allowMultiQueries=true 作用:可以执行批处理,同时发出多个SQL语句。也就是可以在sql语句后携带分号,实现多语句执行。

Mybatis动态SQL foreach批量操作方法

  1. <!-- 根据课程组件id批量修改创建人姓名-->
  2. <update id="updateAllCreatedByByCourseAssemblyId" >
  3. <foreach collection="list" item="item" separator=";" >
  4. UPDATE tar_course_content_info
  5. SET
  6. created_by = #{item.createdBy}
  7. WHERE
  8. course_assembly_id = #{item.courseAssemblyId}
  9. </foreach>
  10.  
  11. </update>

执行结果

Mybatis动态SQL foreach批量操作方法

批量删除

  1. <!-- 根据创建人和内容id进行批量删除-->
  2. <delete id="deleteAllByCreatedByAndContentId">
  3. DELETE FROM tar_course_content_info where (created_by,id) in
  4.  
  5. <foreach collection="list" item="item" open="(" close=")" separator="," nullable="false" index="index">
  6. (#{item.createdBy},#{item.id})
  7. </foreach>
  8.  
  9. </delete>

执行结果

Mybatis动态SQL foreach批量操作方法

总结

学习一个新东西的时候,需要思考的是有哪些最少必要的前置知识我必须掌握,不然效率极慢。掌握最少必要知识之后开始新东西的学习会事半功倍。理论和实践相结合。纸上得来终觉浅,欲知此事须躬行。

到此这篇关于Mybatis动态SQL foreach批量操作的文章就介绍到这了,更多相关Mybatis动态SQL foreach内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wangwei021933/article/details/129632911

延伸 · 阅读

精彩推荐
  • Java教程mybatis框架的xml映射文件常用查询指南

    mybatis框架的xml映射文件常用查询指南

    这篇文章主要给大家介绍了关于mybatis框架的xml映射文件常用查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    YangZeran12632021-09-04
  • Java教程代码量减少90%,Java程序员必会的工具库

    代码量减少90%,Java程序员必会的工具库

    工作很多年后,才发现有很多工具类库,可以大大简化代码量,提升开发效率,初级开发者却不知道。...

    Kirito的技术分享3862021-11-03
  • Java教程Java基于socket服务实现UDP协议的方法

    Java基于socket服务实现UDP协议的方法

    这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧,需要的朋友可以参考下 ...

    wo_soul7262019-12-19
  • Java教程SpringBoot详细讲解静态资源导入的实现

    SpringBoot详细讲解静态资源导入的实现

    在Web开发过程中,我们需要接触许多静态资源,如CSS、JS、图片等;在之前的开发中,这些资源都放在Web目录下,用到的时候按照对应路径访问即可。不过...

    奔走的王木木Sir9952022-12-25
  • Java教程java之swing实现复选框的方法

    java之swing实现复选框的方法

    这篇文章主要介绍了java之swing实现复选框的方法,实例分析了java基于图形界面复选框的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    cj_gameboy4072020-01-05
  • Java教程CentOS 7快速安装jdk

    CentOS 7快速安装jdk

    这篇文章主要为大家详细介绍了CentOS 7快速安装jdk的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    他滴不在5052020-11-27
  • Java教程Java 基础语法中的逻辑控制

    Java 基础语法中的逻辑控制

    这篇文章主要介绍了Java 基础语法中的逻辑控制的相关资料,需要的朋友可以参考下面文章内容...

    吞吞吐吐大魔王8232021-12-18
  • Java教程Java图形界面开发之简易记事本

    Java图形界面开发之简易记事本

    这篇文章主要为大家详细介绍了Java图形界面开发之简易记事本的制作方法,,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    温柔狠角色4822020-06-28