类似JAVA中的for循环,可以遍历集合或数组。 有如下属性: collection :遍历的对象类型(数组、List、Map)
open :表示该语句以什么开始,常用 “(”;
close : 表示以什么结束,常用 “)”。
separator :表示在每次进行迭代之间以什么符号作为分隔符,常用 “,”;
item :表示集合中每一个元素进行迭代时的别名,随便起的变量名,遍历 map 时表示键值对的值。
index :遍历 List 、数组时表示遍历的索引位置,遍历 map 时表示键值对的键。
collection 属性是在使用foreach的时候最容易出错的,该属性是必须指定的,但是在不同场景下,该属性的配置是不一样的,常用的主要有3种情况:
collection传入array即可!
- // 4.批量删除指定id的一些数据,测试动态SQL的
标签,遍历Array - // 按给定的id值进行批量删除数据,传入一个数组,数组中包含要删掉的id值
- // 系统的删除语句:delete from user where id in(12,13,14,16,17,18)
- // 用途:测试
标签,遍历Array数组 - void deleteBatch(int[] ids);
-
-
- <delete id="deleteBatch" parameterType="int">
- delete from user
- <where>
- <foreach collection="array" open="id IN(" close= ")" separator="," item="id">
- #{id}
- foreach>
- where>
- delete>
行批量添加,collection传入list即可!
- // 5.批量插入数据,测试动态SQL的
标签,遍历Collection - // 系统插入语句:insert into user(username,sex,address) values(),(),()
- // 批量新增方法,测试
标签,遍历Collection集合 - void insertBatch(List
user) ;
-
-
- <insert id="insertBatch" parameterType="User">
- insert into user(username,sex,address) values
- <foreach collection="list" item="user" separator=",">
- (#{user.username},#{user.sex},#{user.adddress})
- foreach>
- insert>
注意:1.collection:传入的不是遍历的对象类型map,List、Set、Array传入的类型分别是list、set、array,但Map集合传入的不是map,而是持久层接口中定义的参数名 如:@Param("queryMap")
- // 6.多条件查询:批量查询方法,测试
标签,遍历Map集合 - /**
- * 多条件查询:批量查询方法,测试
标签,遍历Map集合 - * @param map 查询的条件键值对 键:属性名 值:出入要查询的属性名
- * 系统的查询语句:select * from user where username = ? and sex = ?
- * @return
- * @Param:为参数起别名
- */
- List
findUser(@Param("queryMap") Map map) ;
-
-
- <select id="findUser" parameterType="map" resultType="User">
- select * from user
- <where>
- <foreach collection="queryMap" separator="and" index="key" item="value">
- ${key} = #{value}
- foreach>
- where>
- select>