最近做東西,需要向數據庫存儲一個保存在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")標注了變量
使用
aclDeviceMap.keys可以取到所有的key,遍歷。
內層循環中使用
aclDeviceMap[item]類似aclDeviceMap.get("key")取當前key對應的value值。由於value是set所以還需要遍歷。
結果保存成功。再次膜拜強大的Mybatis。
參考:http://btweibin.iteye.com/blog/1949534
