完整错误如下: 
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。

  1. DAO 层:
  2. Long selectCustomerCountList( List customerIdList);
  3.  
  4. XML文件:
  5. <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long">
  6. select count(1) from np_customer_info where id in
  7. <foreach item="item" collection="customerIdList" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER}
  8. </foreach>
  9. </select>
  10. ==========================
  11. 注意:DAO 层接口的参数名与XML 文件中的collection的属性值一致,是导致的问题的主要原因。

解决方法 
第一种:利用Mybatis给我们的封装进行XML配置,将我们的XML中collection属性值设置为list。

  1. DAO 层:
  2. Long selectCustomerCountList( List customerIdList);
  3.  
  4. XML文件:
  5. <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long">
  6. select count(1) from np_customer_info where id in
  7. <foreach item="item" collection="list" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER}
  8. </foreach>
  9. </select>
  10. ======================
  11. 注意:此时collection强制指定为list且不可改变

第二种: 利用注解@Param指定我们的入参名称

  1. DAO层:
  2. Long selectCustomerCountList(@Param("customerIdList") List customerIdList);
  3.  
  4. XML文件:
  5. <select id="selectCustomerCountList" parameterType="java.util.List" resultType="java.lang.Long">
  6. select count(1) from np_customer_info where id in
  7. <foreach item="item" collection="customerIdList" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER}
  8. </foreach>
  9. </select>
  10.  
  11. ======================
  12. 注意: 此时的DAO层参数名可以 @Param("customerIdList") collection的属性值一致

第三种:将我们的List包装成Map参数进行传递

  1. Service业务处理层次上面将参数进行包装
  2. public Long selectCustomerCountMap(List customerIdList) {
  3. Map maps = new HashMap();
  4. maps.put("customerIds", customerIdList);
  5. return customerMapper.selectCustomerCountMap(maps);
  6. }
  7. DAO层:
  8. Long selectCustomerCountMap(Map maps);
  9. XML文件:
  10.  
  11. <select id="selectCustomerCountMap" parameterType="java.util.Map" resultType="java.lang.Long">
  12. select count(1) from np_customer_info where id in
  13. <foreach item="item" collection="customerIds" separator="," open="(" close=")" index=""> #{item, jdbcType=INTEGER}
  14. </foreach>
  15. </select>
  16. ==============
  17. 注意: 入参类型是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. InputStreamReader 和 FileReader联系与区别

    两者关系: FileReader继承自InputStreamReader : 区别: InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字 ...

  2. 028_切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)

    mkdir /data/scriptsvim /data/scripts/nginx_log.sh #!/bin/bashlogs_path="/usr/local/nginx/logs/& ...

  3. servlet实现类似target="_top"功能

    通过网上很多解决方案,大部分都是重定向,或者页面跳转,但是我试了试都不能脱离原来框架,后来发现,可以直接通过form表单的target来实现从servlet跳转到frameset的指定框架,这就不用再 ...

  4. Git基础命令学习

    Git是项目代码管理软件 主要管理逻辑如下: 所有代码保存在远程,本地获取远程代码保存在本地仓库,并于本地工作目录修改代码 修改完成后,提交到本地暂存区,添加必要注释,再尝试提交到远程仓库 若发生冲突 ...

  5. 多层树级关系的json,递归删除空值的数据

    data =[{ "name": "省", "children":[ { "name": "市区", ...

  6. Python学习日记(十)—— 杂货铺(全局变量补充、Python参数传递、字符串格式化、迭代器、生成器)

    全局变量补充 python自己添加了些全局变量 print(vars()) """结果: {'__name__': '__main__', '__doc__': None ...

  7. ROS indigo下Kinect v1的驱动安装与调试

    ROS indigo下Kinect v1的驱动安装与调试 本文简要叙述了在ROS indigo版本下Kinect v1的驱动安装与调试过程. 1. 实验环境 (1)硬件:  台式机和Kinect v1 ...

  8. SCRIPT438: 对象不支持“trim”属性或方法

    关于ie9以下不支持trim()方法 可以在自己封装的框架中加入如下.或直接调用也行. if(!String.prototype.trim) { String.prototype.trim = fun ...

  9. Python 基础学习的几个小例子

    最近在研究动态脚本语言 Python , 出于对其语言精简度的喜欢及大学时期对 matlab 这样的数学领域语言的怀念, 再加上笔者是C++起家,Python中所涉及的del机制与特殊方法重载(类比于 ...

  10. 解决jenkins日志爆满 DNS查询错误

    一.故障 公司的jenkins因为日志量太大把磁盘占满,进而影响了其他程序,仔细一看日志文件"/var/log/jenkins/jenkins.log"几分钟产生了30G的日志 日 ...