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

相關文章
相關標籤/搜索