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