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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

文章来源:https://my.oschina.net/u/3844121/blog/1976103

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

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

写法:

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


    #{item}

原因:

mybatis的DefaultSqlSession中对dao接口的参数做了封装,体现在这个方法里

  private Object wrapCollection(final Object object) {
    if (object instanceof Collection) {
      StrictMap 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 map = new StrictMap<>();
      map.put("array", object);
      return map;
    }
    return object;
  } 
   

其中这一段代码

  if (object instanceof Collection) {
    StrictMap 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。

转载请注明出处。

转载于:https://my.oschina.net/u/3844121/blog/1976103

你可能感兴趣的:(Mybatis新版使用foreach标签遍历Set集合)