Mybatis |
您所在的位置:网站首页 › mybatis批量更新写法 › Mybatis |
动态SQL Foreach批量操作
前言
前置必要知识
MySQL批量插入
MySQL批量查询
MySQL批量修改
MySQL批量删除
使用mybatis中的foreach进行批量操作
foreach标签的各个属性
批量插入
批量查询
批量修改
批量删除
总结
前言
最近正在研究Mybatis的动态SQL,正好学习到了foreach元素。之前也是在项目开发中经常会使用到Mybatis的foreach元素进行批量操作。但是有时候就会使用出错,所以整理和总结了关于使用foreach进行增删改查的方法。通过这篇博客详细对于foreach的使用将会更加熟练和高效。 前置必要知识在学习Mybatis的foreach之前,我们需要掌握到mysql的批量语句是如何书写的。如果不清楚mysql批量语句怎么书写那么在使用Mybatis的foreach元素进行批量操作就跟无头苍蝇一样,原理很简单,mybatis是一种持久层框架,其中一个作用就是拼接SQL并交给数据库执行SQL,所以在mybatis中我们需要将批量的SQL语句拼接成功,所以就会用到批量操作的SQL怎么书写,然后才是怎么和Mybatis的语法结合。 让我们来看看批量的增删改查SQL语句如何书写和执行结果。 MySQL批量插入 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 ) VALUES ( 301906655392563202, 301906577433034752, '语文课', '2022-07-12 19:13:44', 'EmE6TKu4okhu3qK5M1AGQ4', '张三', '2022-07-12 19:13:44', 'PWeDZyRPADjsdxCNWnSWxZ', '王五', 0 ),( 301906655392563203, 301906577433034752, '数学课', '2022-07-12 19:13:44', 'EmE6TKu4okhu3qK5M1AGQ4', '张三', '2022-07-12 19:13:44', 'PWeDZyRPADjsdxCNWnSWxZ', '王五', 0 )执行结果 已经受影响的行数为2行 使用in关键字,in关键字的作用是查询某个范围内的数据 SELECT * FROM tar_course_content_info WHERE is_delete = 0 AND ( created_by, course_assembly_id ) IN (( '张三', 305107474690605056 ),( '李四', 308290117053710337 ))执行结果 执行结果 已经受影响的行数为13行 执行结果 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不抛出异常 批量插入 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 ) values ( #{item.id}, #{item.courseAssemblyId}, #{item.assemblyContent}, #{item.createTime}, #{item.createdId}, #{item.createdBy}, #{item.updateTime}, #{item.updatedId}, #{item.updatedBy}, #{item.iselete} )执行结果 执行结果 第一种情况是需更新的值相同: UPDATE tar_course_content_info SET is_delete=1 WHERE (created_by,id) IN (#{item.createdBy},#{item.id})执行结果 执行结果 执行结果 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |