最近作東西,須要向數據庫存儲一個保存在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")標註了變量sql
使用
aclDeviceMap.keys能夠取到全部的key,遍歷。
內層循環中使用
aclDeviceMap[item]相似aclDeviceMap.get("key")取當前key對應的value值。因爲value是set因此還須要遍歷。
結果保存成功。再次膜拜強大的Mybatis。
參考:http://btweibin.iteye.com/blog/1949534