mybatis关于出现Parameter 'noList' not found. Available parameters are [collection, list]问题的解决方案

当我们要查询一些人的信息时,但这些人的id是由用户确定的,就会采用list集合或者数组作为参数传入方法中,

public List findSomeUsers(List noList);

而在xml文件中就可以用Forreach动态SQL解决

<select id="findSomeUsers" resultType="user3" parameterType="list">
	select * from user where id in
	<foreach collection="noList" index="index" item="no" open="(" separator="," close=")">
		#{no}
	</foreach>
</select>

测试代码:

List<Integer> noList = new ArrayList<>();
noList.add(1);
noList.add(2);
noList.add(3);
noList.add(6);
List<User> list = mapper.findSomeUsers(noList);

结果却出错了,原因是找不到noList这个参数,为什么呢?
接着我在接口方法中的参数前面用注解的方式加上了@Param(“noList”),接着测试了一下,
结果并没有报错,且查出了结果
sql语句是select * from user where id in ( ? , ? , ? , ? )

User [id=1, name=张三, age=23]
User [id=2, name=李四, age=30]
User [id=3, name=张无忌, age=30]
User [id=6, name=张良, age=30]

然后上网查了一下,还有一种说法是:
因为 传递一个 List 实例或者数组作为参数对象传给 MyBatis,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键

接着我恢复了之前发生错误的环境,把xml中的foreach中的collection改成了list,其他的都没改,没有报错,也可以查询出结果。

因此,解决这个异常的两种方式是:
1.在方法参数前面加上你遍历的集合的名称,比如你在foreach的collection中写的是noList,那么你就在传入的list参数前面加上一个注解@Param(“noList”)。
2.将foreach的collection中的值改成list即可。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值