Mybatis foreach 中使用 Map

  1. foreach
  2. 使用 Map

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 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及在迭代结果之间放置分隔符。这个元素是很智能的,因此它不会偶然地附加多余的分隔符。

注意 你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象传递给 foreach 作为集合参数。当使用可迭代对象或者数组时,index 是当前迭代的次数,item 的值是本次迭代获取的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

使用 Map

当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

Mybatis 版本3.1.1,这句话存在问题,应该是迭代对象 Map.entrySet()item.key 是键,item.value 是值。

<if test="tablenameTaskidMap != null and tablenameTaskidMap.entrySet() != null">
    <foreach collection="tablenameTaskidMap.entrySet()" item="mapitem" index="mapindex" open="" separator="" close="">
        union
        select result,count(*) as handle from ${mapitem.key}
        <where>
            <if test="taskids != null and taskids !=''">
                and taskid in
                <foreach collection="mapitem.value" item="item" index="index"
                    open="(" separator="," close=")">
                     #{item}
                </foreach>
            </if>
        </where>
        group by result
    </foreach>
</if>

参考链接:https://stackoverflow.com/questions/18610955/mybatis-iterate-hashmap-with-foreach/46088731#46088731


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:Mybatis foreach 中使用 Map

文章字数:462

本文作者:Bin

发布时间:2018-06-16, 20:32:01

最后更新:2019-08-06, 00:54:35

原始链接:http://coolview.github.io/2018/06/16/MyBatis/Mybatis%20foreach%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20Map/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录