解决Parameter '__frch_item_0' not found. Available parameters are [list]

业务场景:

使用mysql+mybatis进行批量插入时报出如下错误:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [list]
在使用批量插入时我们通常在DAO层定义一个接口方法,然后在对应的mapper.xml中实现相应的sql语句,具体方法如下:
DAO层:
public interface ObInternalCheckSerialNoDTODao {
  boolean insertObInternalCheckSerialnoDTO(List checkSerialNoDTOList);
}
在mapper.xml中的实现:

    insert into OB_INTERNAL_CHECK_SERIALNO
    (OUTBOUND_NO,GOODS_NO,GOODS_NAME,GOODS_SERILNO,TRANS_SN,BOX_NO,CREATE_TIME,
    CREATE_USER,UPDATE_USER,UPDATE_TIME,ORG_NO,DISTRIBUTE_NO,WAREHOUSE_NO)
    values
    
      (
      #{item.outboundNo,jdbcType=VARCHAR},#{item.goodsNo,jdbcType=VARCHAR},#{item.goodsName,jdbcType=VARCHAR},#{item.goodsSerialNo,jdbcType=VARCHAR},
      #{item.transSn,jdbcType=VARCHAR},#{item.boxNo,jdbcType=VARCHAR},now(),#{item.createUser,jdbcType=VARCHAR},#{item.updateUser,jdbcType=VARCHAR},now(),
      #{item.orgNo,jdbcType=VARCHAR},#{item.distributeNo,jdbcType=VARCHAR},#{item.ware
HouseNo,jdbcType=VARCHAR}
      )
    
  
实例对象:
public class ObInternalCheckSerialNoDTO {

  public String outboundNo;
  public String goodsNo;
  public String goodsName;
  public String goodsSerialNo;
  public String transSn;
  public String boxNo;
  //...省略其他属性
  public String orgNo;
  public String distributeNo;
  public String warehouseNo;

解决办法:

网上查了好多方法,自己也调试了半天,一直没有找出错误,最后找到一篇比较靠谱的解决方法,说是出现这种情况,一般都是对象属性与mapper中的属性不一致导致的,那就直接去找对象属性(其实这样代码单独贴出来错误已经很明显了)
这里一个小tip,使用复制对象属性去查找mapper中的属性,Ctrl+F时记得开大小写匹配(ps:之前没开找了好几次也没找到哈哈),最后定位到问题所在,wareHouseNo与mapper中属性不匹配,简直了,这个不知道之前是谁写的,所以驼峰式命名规范很重要!!!





你可能感兴趣的:(日常踩坑与问题处理)