Mybatis @Param
Mybatis @Param
| org.apache.ibatis.binding.BindingException: Parameter 'ids' not found.
Available parameters are [arg0, collection, list]
|
MyBatis 在执行批量删除 SQL 时,找不到 ids
这个参数。
问题原因
Mapper
方法是这样写的:
| int deleteByIds(List<Integer> ids);
|
但在对应的 Mapper XML 里用了:
| <delete id="deleteByIds">
delete from emp where id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
|
这里的问题就是:
- MyBatis 默认不会把参数名识别成
ids
,而是统一命名为 arg0
、arg1
或 list
、collection
。
- 所以你在 XML 里写
collection="ids"
,它根本找不到。
解决方案
✅ 方法一:在参数上加 @Param
注解(推荐)
| int deleteByIds(@Param("ids") List<Integer> ids);
|
XML:
| <delete id="deleteByIds">
delete from emp where id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
|
✅ 方法二:不加 @Param
,直接用 list
或 collection
| <delete id="deleteByIds">
delete from emp where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
|
总结
报错就是因为 方法参数名和 XML 里的 collection
名字不对应。
- 如果你想写成
ids
,必须在接口参数里加 @Param("ids")
。
- 如果懒得写注解,XML 就改用
list
或 collection
。