我有一個用例,其中我想插入一個multimap(例如Multimap)到數據庫中使用mybatis。JAVA | mybatis |插入一個multimap
我不能夠使用下面的訪問鍵和值在MyBatis的: (假設它會調用的entrySet和內部插入之前,它遍歷)
INSERT INTO table1 (integer1, integer2)
VALUES (#{key} , #{value})
不知道如何可以做到這一點? 我假設應該有一個簡單的方法,因爲這是一個基本的用例。
- 編輯 -
雖然我可以創建一個包裝對象,設置這些值,並將其發送到MyBatis的,我想知道是否有任何其他的方式來實現最終的結果不會產生額外的對象,因爲這是我需要他們的唯一地方。
感謝您的幫助。
---編輯--- 合併建議的解決方案後進行測試。對於細節
代碼段:
DAO層:
Map<String, Object> params = new HashMap<>();
params.put("entries", myMultimap.entries());
MyBatis的SQL:
INSERT INTO table1
(integer1, integer2)
VALUES
<foreach item="item" separator="," collection="entries">
(#{item.key} , #{item.value})
</foreach>
--- --- EDIT
各位,用上述溶液注意參數長度最多爲2000個字符。如果您遇到問題,配料/批量插入將是進一步進行的方式。
不多重映射包含單個鍵多個值嗎?多個鍵可以具有相同的值。在這種情況下(ManyToMany關係),你不能在一張表中建模。 – Jim
爲什麼不呢,我們可以使用hashmultimap作爲實現,表的鍵應該包含整數1和整數2。然後我們可以插入(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),沒有任何問題。讓我知道如果我失去了一些吉姆。 – crankparty
HashMultimap確保沒有重複的鍵值對。但是一個鍵可以有'1 .. *'值。你可以將它存儲在一張表中,但爲了減少數據庫模型的減少,我建議使用兩個表格:請參閱下面的答案。 – Jim