文章来源: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