Mybatis 传入的参数为List
错误代码:
mapper接口:
List<MeetingDeploy> resultTypeList(List<String> codes);
mapper.xml:
select * from meeting_deploy where meeting_code IN <foreach item="item" collection="codes" open="(" separator="," close=")" index="index"> #{item} </foreach>
报错信息:org.apache.ibatis.binding.BindingException: Parameter ‘codes’ not found. Available parameters are [collection, list]
错误原因:
传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。
(1)如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
(2)如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
(3)如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.
可修改为
1、mapper接口:
List<MeetingDeploy> resultTypeList(List<String> codes);
mapper.xml
select * from hplan_meeting_deploy where
meeting_code IN
<foreach item="item" collection="list" open="(" separator="," close=")" index="index">
#{item}
</foreach>
2、mapper接口
List<MeetingDeploy> resultTypeList(@Param("codes") List<String> codes);
mapper.xml
select * from hplan_meeting_deploy where
meeting_code IN
<foreach item="item" collection="codes" open="(" separator="," close=")" index="index">
#{item}
</foreach>