Mybatis新版使用foreach标签遍历Set集合

文章来源:http://www.javashuo.com/article/p-dvpbabdy-hw.htmljava

网上的答案没有谈遍历Set集合的,这里来谈谈写法。mybatis

版本:个人版本是mabatis-3.4.6,具体哪一个版本开始支持Set集合不清楚,3.4.6版本后的均可以这么写。app

写法:.net

(默认在dao层接口里面没有使用Mybatis的@Param注解)code

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

缘由:xml

mybatis的DefaultSqlSession中对dao接口的参数作了封装,体如今这个方法里blog

private Object wrapCollection(final Object object) {
    if (object instanceof Collection) {
      StrictMap<Object> map = new StrictMap<>();
      map.put("collection", object);
      if (object instanceof List) {
        map.put("list", object);
      }
      return map;
    } else if (object != null && object.getClass().isArray()) {
      StrictMap<Object> map = new StrictMap<>();
      map.put("array", object);
      return map;
    }
    return object;
  }

其中这一段代码继承

if (object instanceof Collection) {
    StrictMap<Object> map = new StrictMap<>();
    map.put("collection", object);
    if (object instanceof List) {
      map.put("list", object);
    }
    return map;
  }

若是参数Object是个Collection,那么参数会以key为"collection",value为自己的形式存储到map里,这个map就是mapper文件里面的参数来源,而Set继承Collection。接口

转载请注明出处。get

相关文章
相关标签/搜索