最近作东西,须要向数据库存储一个保存在HashMap的key和value中的数据。具体的结构大体是Map<Object, Set<String>>。
数据库中须要保存两个个字段:1.key中对象的id,set中的多个string,显然id和set中的string是1对多的关系;须要嵌套循环。
一开始怀疑Mybatis可否作到这样灵活sql,通过尝试,证实了Mybatis的强大。
具体作法:(Oracle数据库)
<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")标注了变量html
使用
aclDeviceMap.keys能够取到全部的key,遍历。
内层循环中使用
aclDeviceMap[item]相似aclDeviceMap.get("key")取当前key对应的value值。因为value是set因此还须要遍历。
结果保存成功。再次膜拜强大的Mybatis。
参考:http://btweibin.iteye.com/blog/1949534