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

本文详细介绍了在MyBatis 3.4.6版本中遍历Set集合的方法,通过使用<foreach>标签,配合collection属性,实现了对Set集合的有效遍历。文章还深入解析了MyBatis内部机制,解释了为何Set集合可以被正确识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

写法:

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

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

原因:

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

  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。

转载请注明出处。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值