Mybatis 的 foreach 的使用

foreach

另外一个动态 SQL 通用的必要操作是迭代一个集合, 通常是构建在 IN 条件中的。 比如:

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>

foreach 元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可 以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素 是很智能的,它不会偶然地附加多余的分隔符。

注意 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。

这个部分是对关于 XML 配置文件和 XML 映射文件的而讨论的。下一部分将详细讨论 Java API,所以你可以得到你已经创建的最有效的映射。


/**根据 角色用户 ids 查询角色和用户

* @param roleIds
* @return
* @throws BaseException
*/
@SuppressWarnings("unchecked")
public List<Role> findRoleByIds(String roleIds)throws BaseException {
List<String> ids =  java.util.Arrays.asList(roleIds.split(","));
Map<String, List<String>> map= new HashMap<String, List<String>>();
map.put("roleIds", ids);

return this.getSqlSession().selectList("findRoleByIds", map);

}



<!-- 根据部门Id获取部门经理角色  -->
<select id="findRoleByIds"
parameterType="map"
resultType="com.broadtext.commonsys.security.dao.Role">
select * 
from(
select sr.ID as id, sr.ROLE_NAME as roleName from Sys_Role sr
union
select su.ID as id, su.true_name as roleName from Sys_User su
) r
where 1=1
<if test="roleIds != null and roleIds != ''">
and r.id in 
<foreach collection="roleIds" open="(" close=")" separator="," item="roleId">
#{roleId}
</foreach>
</if>
</select>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值