初學者手冊-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);
}
相關文章
相關標籤/搜索