[英]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.