[英]JAVA | mybatis | Insert a multimap
我有一個用例,其中我想使用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>
-編輯-
伙計們,使用上述解決方案時,請注意參數長度最多2000個字符。 如果您遇到問題,則批量/批量插入將是進一步進行的方法。
您需要2個表:KEYS和VALUES,其中VALUES應該具有引用KEYS的外鍵列。 例:
TABLE KEYS:
| ID | KEY |
| 1 | key1|
TABLE VALUES:
| ID | KEY_ID | VALUE |
| 1 | 1 | value1|
| 2 | 1 | value2|
現在要保留多圖,首先需要將一個鍵保留在KEYS表中,然后將相應的值保留在VALUES表中。 讓我知道您是否需要一個例子。
編輯:查看評論
您應該在mybatis中使用foreach標記。 在鍵集或條目上進行foreach。 這樣的事情應該起作用:
INSERT INTO table1 (integer1, integer2)
VALUES
<foreach item="item" seperator="," collection="#{entries}">
( #{item.key)},#{item.value})
</foreach>
條目應引用MultiMap.Entries()的位置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.