MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增

续上篇:MyBatis学习笔记-07.MyBatis动态Sql语句if、where、trim、set

本次将继续记MyBatis动态Sql语句的choose和foreach:

一、choose(较少应用):

有时我们不想应用到所有的条件语句,而只想从中择其一项。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。这里我们以mybatis官方文档中给出的例子简单看。需搭配when标签元素、otherwise标签元素

二、foreach(重点):

动态 SQL 的另外一个常用的操作需求是对一个集合进行遍历。继续以学生表为例,附2个例子进行演示:

数据库表结构:

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第1张图片

数据库表内容:

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第2张图片

1.批量删除(传入array、传入map、传入list并且list中包含实体类)

  • 将要删除的学生的学号放到一个Integer数组里,然后传入实现批量删除

(1)映射文件内容:




	
		delete from student where sno in
		
			#{stuno}
		
	

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第3张图片

open在遍历的开始加“(”,close在遍历的结束加“)”,separator每次遍历后加“,”

(2)测试程序及结果:

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第4张图片

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第5张图片

collection:相当于是el表达式的items,如果传递的是一个参数,并且这个参数是list或者array时,是list,collection只能写list,是array,collection只能写array,如案例传递的是数组array。

  • 如果传递的参数是map,collection写的是map的key。以下用map传递参数,并在内使用list。

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第6张图片

映射文件内容:MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第7张图片

          • 如果传递的参数是list,list里面有实体类或map,本例为实体类,collection写的是list,#{}写的是实体类的属性。(如果list中是map,则#{}中写的是map的key)
          • MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第8张图片
        • 映射文件内容:
        • MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第9张图片

2.批量增加

(1)映射文件内容




	
		insert into student(sname,sex) values
		
			(#{stu.sname},#{stu.sex})
		
	

(2)测试程序及结果

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第10张图片

MyBatis学习笔记-08.MyBatis动态Sql语句foreach的collection的用法以及用foreach实现批量删除与批量新增_第11张图片

你可能感兴趣的:(java,SQL,javaweb,MyBatis,SSM)