完整错误以下:
org.apache.ibatis.binding.BindingException: Parameter ‘customerIdList’ not found. Available parameters are [collection, list]java
解释:
当咱们传递一个 List 实例或者数组做为参数对象传给 MyBatis。当你这么作的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在做为键。List 实例将会以“list” 做为键,而数组实例将会以“array”做为键。因此,当咱们传递的是一个List集合时,mybatis会自动把咱们的list集合包装成以list为Key值的map。apache
DAO 层: Long selectCustomerCountList( List customerIdList); XML文件: <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long"> select count(1) from np_customer_info where id in <foreach item="item" collection="customerIdList" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER} </foreach> </select> ========================== 注意:DAO 层接口的参数名与XML 文件中的collection的属性值一致,是致使的问题的主要缘由。
解决方法
第一种:利用Mybatis给咱们的封装进行XML配置,将咱们的XML中collection属性值设置为list。数组
DAO 层: Long selectCustomerCountList( List customerIdList); XML文件: <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long"> select count(1) from np_customer_info where id in <foreach item="item" collection="list" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER} </foreach> </select> ====================== 注意:此时collection强制指定为list且不可改变
第二种: 利用注解@Param指定咱们的入参名称mybatis
DAO层: Long selectCustomerCountList(@Param("customerIdList") List customerIdList); XML文件: <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long"> select count(1) from np_customer_info where id in <foreach item="item" collection="customerIdList" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER} </foreach> </select> ====================== 注意: 此时的DAO层参数名能够 @Param("customerIdList") 与 collection的属性值一致
第三种:将咱们的List包装成Map参数进行传递app
在Service业务处理层次上面将参数进行包装 public Long selectCustomerCountMap(List customerIdList) { Map maps = new HashMap(); maps.put("customerIds", customerIdList); return customerMapper.selectCustomerCountMap(maps); } DAO层: Long selectCustomerCountMap(Map maps); XML文件: <select id="selectCustomerCountMap" parameterType="java.util.Map" resultType="java.lang.Long"> select count(1) from np_customer_info where id in <foreach item="item" collection="customerIds" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER} </foreach> </select> ============== 注意: 入参类型是java.util.Map而再也不是List ,此时的collection属性值为Map中的Key值。