Parameter 'list1' not found. Available parameters are [list, collection]

注意:

你可以传递一个 List 实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键

public interface EmployeeMapperDynamicSQL {
	public List<Employee> getEmpsByConditionForeach(List<Integer> ids); // 使用foreach标签
}
@Test
	public void select04() throws IOException { // 测试foreach
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			EmployeeMapperDynamicSQL mapper = openSession.getMapper(EmployeeMapperDynamicSQL.class);
			
			List<Employee> list = mapper.getEmpsByConditionForeach(Arrays.asList(1, 3, 5));
			for (Employee emp : list) {
				System.out.println(emp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			openSession.close();
		}
	}
<select id="getEmpsByConditionForeach" resultType="com.mybatis.bean.Employee">
		select * from tb1_employee where id in
		<!-- 
			collection:指定要遍历的集合
				List类型的参数会特殊处理在map中,map的key就叫list
				Array数组类型的参数会特殊处理在map中,map的key就叫array
			item:将当前遍历的元素赋值给指定的变量
			separator:每个元素之间的分隔符
			open:遍历出所有结果拼接一个开始的字符
			close:遍历出所有结果拼接一个结束的字符
			index:索引。遍历list的时候是索引,item就是当前值
				    遍历map的时候,index是key,item就是map的值
			#{变量名}就能取出变量的值,也就是当前遍历出的元素
		 -->
		 <foreach collection="aa" item="item" separator="," open="(" close=")" index="index">
		 	#{item}
		 </foreach>
</select>

解决: 把collection="aa"修改为list,因为mybatis会自动封装在一个map中,而你以集合的方式传参数过去,map会以list作为key,所以将collection="aa"修改为list
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值