声明:
Author:赵志乾
Date:2018-6-24
Declaration:All Right Reserved!!!
背景知识:
1、循环foreach元素循环是指某一个动作或某一系列动作被连续反复执行。其通常用于对集合的遍历,而遍历的目的也有很多种:如做数据统计、做数据拼接、将某些操作作用于集合上的所有或部分元素。
2、SQL语句的集合片段
集合片段在SQL语句中有两种存在形式,一种是位于in子句,用于枚举所有情况;另一种则是位于values子句,用于数据的批量操作,如多条数据添加、多条数据修改等。
1、应用场景:
正如“背景知识”中的集合片段所述,SQL语句中存在集合片段,而且集合片段的语法又各不相同。为此,映射器引入foreach元素,通过该元素的相应属性向框架定制“外部传入的集合参数转换成集合片段”的策略。使得外部发起调用时,框架在内部能够依据定制的策略完成集合片段的拼装。
2、可用属性
foreach元素作为动态SQL语句中唯一的一个循环元素,其总共拥有6个属性:item、index、collection、open、separator、close。各属性的含义如下:
item属性用于在循环过程中引用当前元素,index属性用于表征循环过程中当前元素在集合中的下标,collection属性用于指定外部传入的集合参数,open属性和close属性则用于指定foreach元素生成片段的首尾符号,而separator属性则用于指定foreach元素生成片段中各子片段间的分隔符。
注:由于foreach元素不具有自动修正空语句的能力,需要开发人员在应用代码中保证传入集合不为空,或者使用将foreach元素作为if元素的子元素,通过if元素截获传入集合为空的场景。
3、foreach元素应用示例:
<insert id="insertRoles" parameterType="com.zzq.model.Role"> insert into tbl_role (id, role_name, note) values <foreach item="item" index="index" collection="roleList" open="" separator="," close=""> (#{id},#{roleName},#{note}) </foreach> </insert>
参考资料:《深入浅出MyBatis技术原理与实践》--杨开振