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>  

 

原文地址:https://www.cnblogs.com/wongzzh/p/15019188.html