[MyBatis]--(4)动态SQL语句--(3)循环

版权声明: https://blog.csdn.net/zhaoyaxuan001/article/details/80790305

声明:

Author:赵志乾

Date:2018-6-24

Declaration:All Right Reserved!!!



背景知识:

    1、循环

    循环是指某一个动作或某一系列动作被连续反复执行。其通常用于对集合的遍历,而遍历的目的也有很多种:如做数据统计、做数据拼接、将某些操作作用于集合上的所有或部分元素。

2、SQL语句的集合片段

    集合片段在SQL语句中有两种存在形式,一种是位于in子句,用于枚举所有情况;另一种则是位于values子句,用于数据的批量操作,如多条数据添加、多条数据修改等。


foreach元素

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>


邮箱:[email protected]

参考资料:《深入浅出MyBatis技术原理与实践》--杨开振


猜你喜欢

转载自blog.csdn.net/zhaoyaxuan001/article/details/80790305
今日推荐