JAVA | mybatis |插入多图

时间:2014-02-13 08:28:04

标签: java insert mybatis

我有一个用例,其中我想使用mybatis将多图(例如Multimap)插入数据库。

我无法使用以下方法访问mybatis中的键和值: (假设它会调用entrySet并在插入之前在内部迭代)

INSERT INTO table1 (integer1, integer2)
VALUES (#{key} , #{value})

知道如何做到这一点? 我假设应该有一个简单的方法,因为这是一个基本的用例。

- 编辑 -

虽然我可以创建一个包装器对象,设置这些值并将它们发送到mybatis,我想知道是否有其他方法可以实现最终结果而不创建其他对象,因为这是我需要它们的唯一地方

感谢您的帮助。

--- --- EDIT 在纳入建议的解决方案后进行测试。

详细信息的代码段:

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>

---编辑---

Guys,使用上述解决方案,请注意参数长度最多为2000个字符。如果您遇到问题,批量/批量插入将是继续进行的方式。

1 个答案:

答案 0 :(得分:2)

你需要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()