Mybatis foreach嵌套遍历Map的key和value

Posted 杜先武博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis foreach嵌套遍历Map的key和value相关的知识,希望对你有一定的参考价值。

最近做东西,需要向数据库存储一个保存在HashMap的key和value中的数据。具体的结构大致是Map<Object, Set<String>>。
数据库中需要保存两个个字段:1.key中对象的id,set中的多个string,显然id和set中的string是1对多的关系;需要嵌套循环。
一开始怀疑Mybatis能否做到这样灵活sql,经过尝试,证明了Mybatis的强大。
具体做法:(Oracle数据库)
1
2
3
4
5
6
7
8
9
<insert id="saveMatchResult" >
  INSERT INTO sp4_acl_so (acl_id, so_uuid__proc_def_id)
  <foreach collection="aclDeviceMap.keys" index="index" item="item" separator="UNION ALL">
    <foreach collection="aclDeviceMap[item]" index="index_set" item="set" separator="UNION ALL">
      SELECT #{item.aclId}, #{set}
      FROM DUAL
    </foreach>
  </foreach>
</insert>

aclDeviceMap:就是在接口中使用@Param("aclDeviceMap")标注了变量

使用
aclDeviceMap.keys可以取到所有的key,遍历。
内层循环中使用
aclDeviceMap[item]类似aclDeviceMap.get("key")取当前key对应的value值。由于value是set所以还需要遍历。
结果保存成功。再次膜拜强大的Mybatis。
 
参考:http://btweibin.iteye.com/blog/1949534

以上是关于Mybatis foreach嵌套遍历Map的key和value的主要内容,如果未能解决你的问题,请参考以下文章

bboss oreach循环嵌套遍历map

[mybatis]动态sql_foreach_遍历集合&批量插入

在 MyBatis 3 中为 HashMap 参数嵌套 foreach

Mybatis之foreach用法----ListArrayMap三种类型遍历

如何遍历 <c:forEach> 中的嵌套映射

记一下mybatis中foreach循环遇到的一个小问题