mybatis 使用foreach遍历map
时间: 2025-01-28 11:33:41 浏览: 114
### 使用 MyBatis `foreach` 标签遍历 Map
在 MyBatis 中,`<foreach>`标签用于循环处理集合类型的参数。当需要遍历 `Map` 类型的数据结构时,可以通过指定 `collection` 属性来访问 `Map` 中的具体键值对。
#### 示例:通过 `<foreach>` 遍历 Map 查询数据库记录
假设有一个场景,前端传来一组用户的用户名和年龄作为查询条件,这些信息被封装在一个名为 `conditionMap` 的 `HashMap<String, Object>` 对象里:
```xml
<select id="findUsersByConditions" parameterType="java.util.Map" resultType="User">
SELECT *
FROM users u
WHERE (u.username, u.age) IN
<foreach collection="userList" item="entry" open="(" separator="), (" close=")">
(#{entry.key}, #{entry.value})
</foreach>
</select>
```
上述 SQL 片段中,`collection="userList"` 表明要迭代的是传入的 `Map` 参数里的 `userList` 键所指向的对象;`item="entry"` 定义每次迭代得到的项称为 entry,在这里是 `Map.Entry<String, String>` 形式的条目[^1]。
为了更好地理解这个过程,下面给出 Java 侧准备并调用此接口的例子:
```java
// 准备数据
List<User> userList = Arrays.asList(
new User("Alice", "20"),
new User("Bob", "25")
);
// 将列表转换为适合传递给 Mapper 方法的形式
Map<String, Object> params = new HashMap<>();
params.put("userList",
userList.stream()
.filter(user -> user.getUsername() != null && !"".equals(user.getUsername()))
.collect(Collectors.toMap(User::getUsername, User::getAge))
);
```
这段代码创建了一个包含多个用户的信息映射表,并将其放入到待发送至 MyBatis 映射文件的方法参数之中[^3]。
阅读全文
相关推荐



















