Mybatis 的 foreach 的使用

来源:互联网 发布:python服务端 编辑:程序博客网 时间:2024/05/18 17:40

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>




0 0
原创粉丝点击