天天看點

org.apache.ibatis.binding.BindingException【原因彙總】

從網上找到的資源,自己整理了一些,不辜負原來的整理着。

背景:Spring整合Mybatis

報錯:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

解釋:就是說,你的Mapper接口,被Spring注入後,卻無法正常的使用mapper.xml的sql;

         這裡的Spring注入後的意思是,你的接口已經成功的被掃描到,但是當Spring嘗試注入一個代理(MyBatista實作)的實作類後,卻無法正常使用。這裡的可能發生的情況有如下幾種;

1、接口已經被掃描到,但是代理對象沒有找到,即使嘗試注入,也是注入一個錯誤的對象(可能就是null)

2、接口已經被掃描到,代理對象找到了,也注入到接口上了,但是調用某個具體方法時,卻無法使用(可能别的方法是正常的)

3、mapper接口和mapper.xml是否在同一個包(package)下?名字是否一樣(僅字尾不同)?

4、mapper.xml的命名空間(namespace)是否跟mapper接口的包名一緻?

5、接口的方法名,與xml中的一條sql标簽的id一緻

6、配置maven環境資源

如果接口中的傳回值List集合(不知道其他集合也是),那麼xml裡面的配置,盡量用resultMap(保證resultMap配置正确),不要用resultType

最後,如果你的項目是maven項目,請你在編譯後,到接口所在目錄看一看,很有可能是沒有生産對應的xml檔案,因為maven預設是不編譯的,是以,你需要在你的pom.xml的<build></build>裡面,加這麼一段:

我就是坑在了第5點上,折騰了四個多小時,大家及時發現。