MyBatis 批量操作、集合遍历-foreach
在使用mybatis操作数据库时,经常会使用到批量插入、IN条件查询的情况,这时就难免要使用到foreach元素。下面一段话摘自mybatis官网:
foreach 元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。
图例
接口定义
实现
批量插入
void batchInsertWorks(@Param("empNo") String empNo, List<Works> worksList);
<insert id="batchInsertWorks" parameterType="java.util.List">
delete from mf_works_schedule where emp_no = #{empNo};
insert into mj_works(id_, emp_no, rest_day, rest_date, update_time)
values
<foreach collection ="worksList" item="item" index= "index" separator =",">
(
#{item.id}, #{item.empNo}, #{item.restDay},#{item.restDate}, now()
)
</foreach >
ON DUPLICATE KEY UPDATE update_time=now();
</insert>
这里我传递的参数是List,所有parameterType为java.util.List
在<insert>或其他mybatis的标签中,可以写多个SQL语句,数据库会依次执行,记得一个语句结束后用分号结尾
foreach中collection的内容(worksList),就是传递的参数的名字
separator表示用两个对象之间用逗号相隔,即:insert into xxx(column1,column2,column3) values(...), (...), (...)
item就有点像:for(Works item : worksList) { ... }
index在List和数组中,表示元素的序号,在map中,index表示元素的key
IN查询、删除
List<Order> queryByAppointmentDate(@Param("dateArray") String[] dateArray);
<select id="queryByAppointmentDate" resultMap="xxx.xxx.xxx.Order">
select * from mj_order where appointment_date in
<foreach collection="dateArray" item="item" index="index" open="(" separator="," close=")">
(
#{item}
)
</foreach>
</select>
这里的foreach参数和批量插入类似,多了个open和close,分表表示该语句从什么时候开始,什么时候结束
删除也类似:
void deleteEmpRestInfo(@Param("idArray") String[] idArray);
<delete id="deleteEmpRestInfo">
delete from mj_works where id_ in
<foreach collection="idArray" item="item" index="index" open="(" separator="," close=")">
(
#{item}
)
</foreach>
</delete>
批量更新参数传入的是map写法
/**
* @Author: Wu
* @Description: 批量更新
* @Date:
*/
@Test
public void deleteByUpdates(){
Map<String,Object> map =new HashMap<>();
List list=new ArrayList();
list.add();
list.add();
map.put("status",);
map.put("list",list);
int a= terminalPrivilegesMapper.updateStatus(map);
System.out.println(a); <!--批量更新状态-->
<update id="updateStatus" parameterType="java.util.Map">
UPDATE INFO_TERMINALPRIVILEGES SET STATUS = #{status}
WHERE ID IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item,jdbcType=DECIMAL}
</foreach>
</update>
批量更新传入参数为list写法
<!-- 批量逻辑删除信息 -->
<update id="logicDeletes" parameterType="list">
UPDATE INFO_TERMINALTYPE SET DELETED = WHERE ID IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item,jdbcType=DECIMAL}
</foreach>
</update>
MyBatis 批量操作、集合遍历-foreach的更多相关文章
- - 集合 遍历 foreach Iterator 并发修改 ConcurrentModificationException MD
目录 目录 为什么不能在 foreach 循环里进行元素的 remove/add 操作 背景 foreach 循环 问题重现 fail-fast remove/add 做了什么 正确姿势 直接使用普通 ...
- Java8 新特性 Stream Api 之集合遍历
前言 随着java版本的不断更新迭代,java开发也可以变得甜甜的,最新版本都到java11了,但是后面版本也是不在提供商用支持,需要收费,但是java8 依然是持续免费更新使用的,后面版本也更新很快 ...
- MyBatis参数传入集合之foreach动态sql
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...
- 随心所欲~我也做个集合遍历器吧(自己的foreach,委托的威力)
感觉微软在面向对象三大原则中,封装性运用的最为突出,它会将一些复杂的算法,结构,功能代码进行封装,让程序员在使用时十分得心应手,如关键字里的foreach和labmda表达式里的Foreach等等,今 ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- mybatis判断集合为空或者元素个数为零
mybatis判断集合为空或者元素个数为零: <if test="mlhs != null and mlhs.size() != 0"> and t.mlh_name ...
- 2018/1/8 学习汇总,kettle简单介绍,集合遍历方式的选择及原理,防止表单重复提交的后台解决方案
昨天因为当前这个二次开发项目的接近尾声,要求我们将生产环境数据库里的数据迁移到现在新的数据库来,但老数据库里是sqlserver而新数据库则是ORACLE,不仅仅面对着数据库数据类型结构不一致的问题, ...
- mybatis动态sql之foreach标签
foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量.它也允许你指定开头与结尾的字符串以及在迭代结果之间放置分隔符.这个元素是很 ...
- MyBatis传入集合 list 数组 map参数的写法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...
随机推荐
- pycharm安装和首次使用
PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS. Windows. Linux 系统. PyCharm 功能 : 调试.语法高亮.Project管理.代码 ...
- Java实现归并排序和快速排序
参考http://blog.csdn.net/morewindows/article/details/6684558和http://developer.51cto.com/art/201206/344 ...
- Python之re正则模块
正则表达式可以帮助我们更好的描述复制的文本格式,可以更好地利用它们对文本数据进行检索.替换.提取和修改操作. http://www.cnblogs.com/huxi/archive/2010/07/0 ...
- python数据结构与算法篇:排序
1.冒泡排序(英语:Bubble Sort) 它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...
- 赢在面试之Java泛型篇(十二)
139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...
- CTF 文件包含与伪协议
正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议. 先放出原文链接(http://www.freebuf.com/column/150028 ...
- 自理一遍android 高级知识
之后按目录得复习巩固 目录: 客卓高级知识整理 1 移动架构 1.1 素养与基础 1.1.1 主流设计模式 创建型 行为型 结构型 1.1.2 UML 1.1.3 设计原则 1.1.4 AOP架构 1 ...
- Akka(39): Http:File streaming-文件交换
所谓文件交换指的是Http协议中服务端和客户端之间文件的上传和下载.Akka-http作为一种系统集成工具应该具备高效率的数据交换方式包括文件交换和数据库表行的上传下载.Akka-http的数据交换模 ...
- WebApi接收复杂类型参数
当接收实体时,该实体类不能添加Serializable属性,否则传来的json数据无法映射成功?
- springMVC+commons-fileupload上传文件大小限制异常
异常信息: 严重: Servlet.service() for servlet [suibian] in context with path [/SpringMvcDemo3] threw excep ...