码迷,mamicode.com
首页 > 其他好文 > 详细

foreach

时间:2020-08-01 12:31:14      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:方便   遍历   键值   index   集合   方法   user   数组名   where   

foreach 标签用来遍历数组、列表和 Map 等集合参数,常与 in 关键字搭配使用。

遍历列表

<select id="selectUserInIds" resultType="com.imooc.mybatis.model.User">
  SELECT * FROM imooc_user
  WHERE id IN
  <foreach collection="list" open="(" close=")" separator="," item="item" index="index">
    #{item}
  </foreach>
</select>

foreach 标签共有 6 个属性,它们的作用分别为:

  • collection: 被遍历集合参数的名称,如 list;
  • open: 遍历开始时插入到 SQL 中的字符串,如 ( ;
  • close: 遍历结束时插入到 SQL 中的字符串,如 ) ;
  • separator: 分割符,在每个元素的后面都会插入分割符;
  • item: 元素值,遍历集合时元素的值;
  • index: 元素序列,遍历集合时元素的序列。

foreach 标签的 collection
属性在接受参数名有两种情况:一、匿名参数,当在 java 方法中没有通过 @Param 注解指定参数名时,列表类型的使用默认参数名
list。二、具名参数,java 方法中使用了@Param 注解指定了参数名称,则 foreach 中的 collection
属性必须为参数名,如:

List<User> selectUserInIds(@Param("ids") List<Integer> ids);

<foreach collection="ids" open="(" close=")" separator="," item="item" index="index">
  #{item}
</foreach>

我们推荐你为列表类型参数用注解指定一个名称,让使用该名称来遍历,方便代码维护和阅读。

遍历数组

当 Java 方法使用的参数类型为数组时,如下:

List<User> selectUserInIds(Integer[] ids);

如果 ids 参数使用 @Param 注解指定了参数名称,则 foreach 标签中的 collection 属性必须为该名称;但若未指定名称,则在 foreach 标签中使用默认数组名称 array,如下:

<select id="selectUserInIds" resultType="com.imooc.mybatis.model.User">
  SELECT * FROM imooc_user
  WHERE id IN
  <foreach collection="array" open="(" close=")" separator="," item="item" index="index">
    #{item}
  </foreach>
</select>

遍历Map

当 Java 方法使用的参数类型为 Map 时,如下:

int updateUserById(@Param("params") Map map, @Param("id") Integer id);

使用 foreach 标签遍历 Map 时,collection 属性值为注解指定的参数名,即 params,且 item 是 Map 的键值,index 是键名。

<update id="updateUserById">
  UPDATE imooc_user
  SET
  <foreach collection="params" item="val" index="key" separator=",">
    ${key} = #{val}
  </foreach>
  WHERE id = #{id}
</update>

注意: 由于 key 是字段名称,因此不能使用#{}作为占位符,只能使用${}在字符串中替换。

updateUserById 生成的 SQL 语句大致如下:

UPDATE imooc_user SET score = ? , age = ? WHERE id = ?

foreach

标签:方便   遍历   键值   index   集合   方法   user   数组名   where   

原文地址:https://www.cnblogs.com/qiuwenli/p/13413304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!