今天我测试一个方法时出现了一个错误: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'orderItemList' not found. Available parameters are [collection, list]
原方法是这样的
import org.springframework.data.repository.query.Param;
int batchInsert(@Param("orderItemList") List<OrderItem> orderItemList);
mybatis中的语句如下
<insert id="batchInsert" parameterType="java.util.List">
insert into mall_order_item ( user_id, order_no,
product_id, product_name, product_image,
current_unit_price, quantity, total_price
)
values
<foreach collection="orderItemList" index="index" item="item" separator=",">
(
#{item.userId},
#{item.orderNo},
#{item.productId},
#{item.productName},
#{item.productImage},
#{item.currentUnitPrice},
#{item.quantity},
#{item.totalPrice}
)
</foreach>
</insert>
这么看代码没有什么问题,那为什么提示'orderItemList'这个变量没有找到呢?
后面我才发现是@Param注解使用错误了. @Param注解有两种,一种是属于spring
import org.springframework.data.repository.query.Param;
一种是属于mybatis的
import org.apache.ibatis.annotations.Param;
前者的参数注入方式基于方法中参数的顺序,后者基于参数的名称.
就像我所犯错误中,我用的是spring的注解,所以需要将代码改成这样
<foreach collection="#{0}" index="index" item="item" separator=",">
另一种做法无需改mybatis文件中的代码,只需换成mybatis的@Param注解即可.
import org.apache.ibatis.annotations.Param;