完整错误如下: 
org.apache.ibatis.binding.BindingException: Parameter ‘customerIdList’ not found. Available parameters are [collection, list]

解释: 
当我们传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时 候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。

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指定我们的入参名称

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参数进行传递

在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值。

  

Mybatis传递List集合的更多相关文章

  1. MyBatis传递参数

    MyBatis传递参数 一.使用 map 接口传递参数 在 MyBatis 中允许 map 接口通过键值对传递多个参数,把接口方法定义为 : public List<Role> findR ...

  2. mybatis 传递参数的方法总结

    有三种mybatis传递参数的方式: 第一种 mybatis传入参数是有序号的,可以直接用序号取得参数 User selectUser(String name,String area); 可以在xml ...

  3. SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台

    假设有一个bean名叫TestPOJO. 1.使用ajax从前台传递一个对象数组/集合到后台. 前台ajax写法: var testPOJO=new Array(); //这里组装testPOJO数组 ...

  4. Android开发之页面跳转传递list集合

    这篇随笔这里详细记录两个activity之间如何传递list集合中的数据. 1.首先要对javabean进行序列化处理,即实现Serializable. package com.anhua.bean; ...

  5. 转:Mybatis系列之集合映射

    转:Mybatis系列之集合映射 上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联.本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系. 实现销售与客户多对多关系 本文中仍延用<M ...

  6. mybatis传递多个参数值(转)

    Mybatis传递多个参数   ibatis3如何传递多个参数有两个方法:一种是使用Map,另一种是使用JavaBean. <!--      使用HashMap传递多个参数      para ...

  7. Mybatis传递多个参数的4种方式(干货)

    Mybatis传递多个参数的4种方式(干货)-----https://blog.csdn.net/youanyyou/article/details/79406486

  8. Mybatis传递多个参数的几种方式

    顺序传参法 public User selectUser(String name, int deptId); <select id="selectUser" resultMa ...

  9. Intent传递list集合时异常解决

    以前只是用intent传递一些简单的值,最近传递list集合时发现值总是传不过去,logcat报如下错误 说的是不能处理值为null的情况,回过头看list集合时确实发现有value为null的key ...

随机推荐

  1. P5358 [SDOI2019]快速查询

    思路:...乱搞数据结构?? 提交:1次 题解: 观察到除了单点就是全局操作,所以我们维护一个全局加法标记add和乘法标记mul和答案sum. 单点修改时,比如我们要把 \(pos\) 位置改成 \( ...

  2. JS 时间转换函数 字符串时间转换毫秒(互转)

    字符串转化为日期 let util = function(){ Date.prototype.Format = function(fmt) { var o = { "M+" : t ...

  3. 普转提——有趣的数,欢乐ABC,打游戏

    有趣的数——构造符合条件的数 给你一个区间,问有多少个数符合每一位中,只有一个数字和其他数字不同,也就是其他数字都相同,有且只有一个异类: 数据范围是1e16: 因为只考虑数量而不用管大小: 只要0到 ...

  4. JAVA RPC 生产级高可用RPC框架使用分享

    先放出链接,喜欢的给个star:https://gitee.com/a1234567891/koalas-rpc 一:项目介绍 koalas-RPC 个人作品,提供大家交流学习,有意见请私信,欢迎拍砖 ...

  5. easyui-textbox输入框数字校验

    输入框数字校验 $("#reg_num").textbox('textbox').bind('keyup', function(e){ $("#reg_num" ...

  6. pwn学习日记Day20 《程序员的自我修养》读书笔记

    可执行文件的装载与进程 覆盖装入和页映射是两种典型的动态装载方法 进程建立的三步 1.创建一个独立的虚拟地址空间 2.读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系. 3.将CPU的指令寄存 ...

  7. 笔记七(编写第一个UEFI程序)

    搭建好uefi开发环境之后,在MyWorkspace文件夹中建立一个文件夹ExamplePkg; ,然后在ExamplePkg文件夹中创建HelloWorld文件夹,Include文件夹,Exampl ...

  8. Clock Generator PLL with Integrated VCO_ADF4360-9

    Clock Generator PLL with Integrated VCO_ADF4360-9     2和3之间需要有大于15ms的时间间隔

  9. CentOS7 升级 python3 过程及注意

    • 从官网下载python3的压缩包,解压(以3.5.1版本为例)• 创建安装目录(自定义)sudo mkdir /usr/local/python3• cd 进入解压目录sudo ./configu ...

  10. 配置WEB错误页面

    项目运行时,难免会出现错误,这些错误我们不可以也不方便直接让用户看到,所以配置错误页面是非常必要的. 一下是项目的Web.xml文件,在最下方阴影部分是配置错误界面. <?xml version ...