Parameter 'collection' not found

在使用MyBatis进行数据库操作时,遇到Parameter 'collection'未找到的问题。错误源于dao层参数类型与sql中parameterType不匹配。案例1中,参数类型应从ArrayList改为Map。案例2提供了两种解决方案,一是调整dao层方法,二是修改sql语句中的parameterType。

nested exception is org.apache.ibatis.binding.BindingException: Parameter çollection'not found. Available parameters are [depId, userList, operator, param3, param1, param2]

工具:mybatis+pgsql

案例1

dao层

void insert(String depId, String operator, List<User> userList); 

sql

<insert id = "insert" parameterType = "java.util.ArrayList">
	insert into user (username,sex,depId,create_by)
	     values
	   <foreach collection="collection" separator="," item="val">
	       (#{val.username}, #{val.sex}, #{depId}, #{create_by})
	   </foreach>
</insert>

执行后抛出异常信息:
"nested exception is org.apache.ibatis.binding.BindingException: Parameter 'collection' not found. Available parameters are [depId, userList, operator, param3, param1, param2]"
错误原因:parameterType = “java.util.ArrayList”,但是dao层参数类型是map,不匹配导致的。修改代码如下:
dao层: @Param

void insert(@Param("depId") String depId, 
            @Param("operator") String operator, 
            @Param("userList") List<User> userList); 

sql: parameterType = "java.util.HashMap"

<insert id = "insert" parameterType = "java.util.HashMap">
	insert into user (username,sex,depId,create_by)
	     values
	   <foreach collection="collection" separator="," item="val">
	       (#{val.username}, #{val.sex}, #{depId}, #{create_by})
	   </foreach>
</insert>

案例2

dao层

List<User> select(List<User> userList); 

sql

<select id = "select" parameterType = "java.util.ArrayList" returnType = "com.dto.User">
	select  * 
	  from  user 
	 where  id in
	   <foreach collection="userList" separator="," item="user" open="(" close=")">
	      #{user.username}
	   </foreach>
</select>

执行后抛出异常信息:
"nested exception is org.apache.ibatis.binding.BindingException: Parameter 'userList' not found. Available parameters are [collection, list]"

解决方案一:
dao层: @Param

void insert(@Param("userList") List<User> userList); 

解决方案二:
sql: collection="collection" 或者 collection="list"

<select id = "select" parameterType = "java.util.ArrayList" returnType = "com.dto.User">
	select  * 
	  from  user 
	 where  id in
	   <foreach collection="collection" separator="," item="user" open="(" close=")">
	      #{user.username}
	   </foreach>
</select>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值