MyBatis(五)动态SQL 之 foreach 标签

一、foreach 标签

  foreach:主要用于循环迭代

  语法格式:

<foreach collection="" item="" open="" close="" separator="" index="">
</
foreach> foreach 对一个数组或集合进行遍历 collection:指定要遍历的集合或数组 item:设置别名 close:设置循环体的结束内容 open:设置循环体的开始内容 separator:设置每一次循环之间的分隔符 index:若遍历的是list,index代表下标;若遍历的是map,index代表键

  属性说明:

collection:要迭代的集合(数组)【list类型的参数会特殊处理封装在map中,map的key就叫list】
        item:将当前遍历出的元素赋值给指定的变量
        open:遍历出所有结果拼接一个开始的字符
        close:遍历出所有结果拼接一个结束的字符
        separator:元素与元素之间的分隔符
        index:索引
                迭代的是 List 集合:index 表示的是当前元素的下标,item就是当前值;
                迭代的是 Map 集合:index 表示的当前元素的 key,item就是map的值
        #{变量名}就能取出变量的值也就是当前遍历出的元素

  

二、使用 foreach 标签

  在接口中声明方法:

    //查询员工 id在给定集合中
    public List<Employee> getEmpsByConditionForEach(@Param("ids")List<Integer> ids);

  在对应的 xml 中进行配置:

    <!--
        public List<Employee> getEmpsByConditionForEach(List<Integer> ids);
    -->
    <!--
        collection:指定要遍历的集合
            list 类型的参数会特殊处理封装在 map中,map的key就叫 list
        item:将当前遍历出的元素赋值给指定的变量
        separator:每个元素之间的分隔符
        open:遍历出所有结果拼接一个开始的字符
        close:遍历出所有的结果拼接一个结束的字符
        index:索引。遍历list的时候index是索引,item就是当前值;
                    遍历map的时候index表示的就是map的key,item就是map的值

        #{变量名} 就能取出变量的值也就是当前遍历出的元素

    -->
    <select id="getEmpsByConditionForEach" resultType="Employee">
        select * from tbl_employee
        <!--
            <foreach collection="list" item="item_id" separator="," open="(" close=")" index="i">
                #{item_id}
            </foreach>
        -->
        <foreach collection="ids" item="item_id" separator="," open="where id in (" close=")" index="i">
            #{item_id}
        </foreach>
    </select>

  

  注意

  (1)如果传递的参数在 List/Collection/Array 中,MyBatis 还是会将 list,、collection、array 放在 map 中,List 集合会以 list 为键,Array 为已 array 为键。

  (2)可以在方法的形参处使用 @Param(key) 来为 map 指定键。

//通过list集合实现批量删除
public void  deleteMoreByList(@Param("ids")List<Integer> ids);

  

三、

四、

五、

原文地址:https://www.cnblogs.com/niujifei/p/15240599.html