mybatis foreach遍历list map
可以使用MyBatis的foreach标签来遍历list和map。对于list类型的参数,可以使用foreach的item属性来指定变量名,然后在SQL语句中使用#{}占位符来引用变量。对于map类型的参数,可以使用foreach的collection属性来指定Map变量名,然后在SQL语句中使用#{key}和#{value}来分别引用Map的key和value。
mybatis 使用foreach遍历map
使用 MyBatis foreach
标签遍历 Map
在 MyBatis 中,<foreach>
标签用于循环处理集合类型的参数。当需要遍历 Map
类型的数据结构时,可以通过指定 collection
属性来访问 Map
中的具体键值对。
示例:通过 <foreach>
遍历 Map 查询数据库记录
假设有一个场景,前端传来一组用户的用户名和年龄作为查询条件,这些信息被封装在一个名为 conditionMap
的 HashMap<String, Object>
对象里:
<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 侧准备并调用此接口的例子:
// 准备数据
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]。
mybatis foreach遍历数组
MyBatis 的 foreach
遍历标签允许你在 SQL 映射文件中动态地迭代数组、集合或 Map。这个标签非常有用,当你需要根据数据源中的数据动态生成 SQL 语句时。
在 <foreach>
标签中,你需要指定三个属性:
- item:元素变量名,用于存储遍历到的数据。
2.index:索引变量名,如果需要的话可以记录元素的位置。
3.collection:数据源,通常是 list
或 map
类型的变量名。
例如,如果你有一个用户列表,并想针对每个用户执行一条更新操作,你可以这样写:
<update id="updateUsers" parameterType="java.util.List">
UPDATE user SET status = #{status} WHERE id IN
<foreach item="user" index="index" collection="users" open="(" separator="," close=")">
#{user.id}
</foreach>
</update>
在这个例子中,item
是当前用户对象,index
是它的索引,collection
是用户列表。open
, separator
, 和 close
分别指定了开始括号、分隔符和结束括号的内容,它们可以按照需求自定义。
相关推荐
















