Parameter 'orderItemList' not found. Available parameters are [collection, list]

147 阅读1分钟

今天我测试一个方法时出现了一个错误: 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;