mybais中遍历map时key对应的value为数组怎么处理
时间: 2024-03-02 21:51:53 浏览: 54
在MyBatis中遍历map时,如果key对应的value为数组,可以使用`foreach`标签来处理。
假设我们有一个`Map<String, Integer[]>`,我们想要遍历这个map,并将其中的元素插入到数据库中,可以使用以下的XML配置:
```xml
<insert id="insertMap" parameterType="java.util.Map">
INSERT INTO my_table (key, value)
VALUES
<foreach collection="map" item="entry" separator=",">
<foreach collection="entry.value" item="value" separator=",">
(#{entry.key}, #{value})
</foreach>
</foreach>
</insert>
```
在上述代码中,我们使用了两个嵌套的`foreach`标签。外层的`foreach`标签遍历map,内层的`foreach`标签遍历数组。在内层的`foreach`标签中,我们使用了`${entry.key}`来获取map中当前元素的key,使用`${value}`来获取数组中当前元素的值。
使用上述的XML配置,可以将map中所有的元素插入到数据库中,每个元素都会转化为一条INSERT语句。例如,如果我们有以下的map:
```java
Map<String, Integer[]> map = new HashMap<>();
map.put("key1", new Integer[] {1, 2, 3});
map.put("key2", new Integer[] {4, 5});
```
使用上述的XML配置,会生成以下的SQL语句:
```sql
INSERT INTO my_table (key, value)
VALUES ('key1', 1), ('key1', 2), ('key1', 3), ('key2', 4), ('key2', 5)
```
注意,在XML配置中,我们使用了`parameterType="java.util.Map"`来指定参数类型为`Map`,这样MyBatis就会将传入的参数转化为一个`Map`对象。在SQL语句中,我们使用了`#{entry.key}`来获取map中当前元素的key,使用`#{value}`来获取数组中当前元素的值。在内层的`foreach`标签中,我们使用了`separator=","`来指定元素之间的分隔符为逗号。
阅读全文