初学者手册-MyBatis踩坑记(org.apache.ibatis.binding.BindingException)

一、参数绑定失败html

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'msgs3' not found. Available 
parameters are [msgs, param1]

 相关信息java

<insert id="insertBatch">
    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    <foreach collection ="msgs3" item="user" separator =",">
         (#{user.id}, #{user.name}, #{user.delFlag})
    </foreach >
</insert>
//Mapper类         
public interface UserMapper {         
  public void insertBatch (List<User> users);
}

分析思路spring

通过测试发现错误是从map.xml文件报出来的,也就是说,系统是能够读到xml文件的,可是经过xml文件读取对应的参数msgs3时报错。即,问题出在map.java上面。可是,检查了命名,并无相关问题。apache

解决方案mybatis

既然是绑定的问题,那么问题确定不是在xml文件上,就是在对应的map的java方法上。因此,有两种解题方法。app

值得注意的是:指定了传参名称之后,默认值就会失效测试

一、修改xml文件spa

经过测试发现,foreach 中的collection貌似默认值为 list,当不指定传参的名称时,能够直接使用。code

<insert id="insertBatch">
    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    <foreach collection ="list" item="user" separator =",">
         (#{user.id}, #{user.name}, #{user.delFlag})
    </foreach >
</insert>

 

二、修改Mapxx.java中的方法参数xml

//Mapper类         
public interface UserMapper {         
  public void insertBatch (@Param("msgs") List<User> users);
}
相关文章
相关标签/搜索