zoukankan      html  css  js  c++  java
  • 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>  

     

  • 相关阅读:
    黄聪:robots.txt一分钟教程
    黄聪:C#获取系统中的所有字体
    黄聪:C#下如何实现服务器+客户端的聊天程序
    黄聪:C#截取DOS命令输出流取得网卡MAC地址
    黄聪:选择适当的关键词
    黄聪:C#的Main(String[] args)参数输入问题
    黄聪:C#正则表达式整理备忘
    黄聪:【强烈推荐】搜索引擎排名决定一切吗!
    黄聪:第2章 并发操作的一致性问题 (2)
    黄聪:VS2008 "LIB 环境变量" 无效解决方案
  • 原文地址:https://www.cnblogs.com/wongzzh/p/15019188.html
Copyright © 2011-2022 走看看