Mybatis foreach循环map集合

今天想用多条件查询,使用foreach遍历map得到字段名和字段值,百度了许多东西都没有一个能解决的。后来终于解决了,代码如下

public int searchCount(Map<String, Object> map) {
		Map<String, Object> map1 = new HashMap<String, Object>();
		map1.put("aa", map);
		return sqlSessionTemplate.selectOne("org.lanqiao.dao.StudentDao.searchCount", map1);
	}

这是我的dao层,根据多条件查询相应的数量

<!-- 符合条件的数据一共有多少条 -->
	<select id="searchCount" resultType="int" parameterType="map" >
		select count(*) from student
		<where>
		<foreach collection="aa.keys" index="index" item="item"  separator="and">
		${item}=#{aa[${item}]}
		</foreach>
		</where>

	</select>

这是我的mapper,多条件查询数量

解释:首先我的dao层的map又进行了一次封装,再用一个map存起来,key值是 aa,这样就可以在mapper.xml 通过 aa 拿到我的map

其次mapper里面的foreach的是 aa.keys (就是该map的所有key值,item是具体的每一项),${item}得到key值,#{aa[${item}]} 拿到value值。


追加:${} 与 #{}是有区别的。前者得到字段名(不会用 '' 包起来,因为数据库的字段值只能是值) ,后者相反 


### 使用 MyBatis `foreach` 标签遍历 MapMyBatis 中,`<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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值