Mybatis_传入List参数抛MyBatisSystemException异常

本文介绍了解决MyBatis中因参数名称不匹配导致的BindingException异常的方法。通过调整Mapper.xml文件中的参数名称或将参数显式绑定到指定名称,确保List类型的参数能够正确传递。

1. 发生异常的背景
 情景:

//在DAO层mapper层中定义的接口
int existIccidCount(List<String> iccidList);
//在Mapper.xml文件中
<select id="existIccidCount" parameterType="java.util.List" resultType="int">
    select count(1) from iot_base_card where iccid in 
    <foreach collection="iccidList" item="iccid" open="(" separator="," close=")">
        #{iccid}
    </foreach>
</select>
//所抛的异常
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'iccidList' not found. Available parameters are [collection, list]

//发生异常的原因
Caused by: org.apache.ibatis.binding.BindingException: Parameter 'iccidList' not found. Available parameters are [collection, list]

异常图
 
2. 解决方法一
将mapper.xml文件中的List参数的名称改为list。
解决方法一
 

  • 解决原理:
    当你传递一个List实例或数组作为参数对象给Mybatis时,Mybatis会自动将它包装在一个Map中,名称根据不同类型而不同。当你的类型是List数组时,key则是list,当你的类型是Array数组,key则是array。自然名称所对应的value是你传进来的实例。

3. 解决方法二
 如果你非要想用自己命名的变量名也是可以的,Mybatis还提供了参数绑定的方法用来解决这个问题。
 
在mapper接口的方法中进行参数绑定。

//修改后的接口
int existIccidCount(@Param("iccidList") List<String> iccidList);

@Param后所跟的变量名必须和Mapper.xml文件中的变量名一样。
图示

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值