1. 程式人生 > >報錯:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

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

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

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

介面已經被掃描到,但是代理物件沒有找到,即使嘗試注入,也是注入一個錯誤的物件(可能就是null)
介面已經被掃描到,代理物件找到了,也注入到介面上了,但是呼叫某個具體方法時,卻無法使用(可能別的方法是正常的)
當然,我們不好說是那種情況,畢竟報錯的結果是一樣的,這裡就提供幾種排查方法:

mapper介面和mapper.xml是否在同一個包(package)下?名字是否一樣(僅字尾不同)?
比如,介面名是NameMapper.java;對應的xml就應該是NameMapper.xml
mapper.xml的名稱空間(namespace)是否跟mapper介面的包名一致?
比如,你介面的包名是com.abc.dao,介面名是NameMapper.java,那麼你的mapper.xml的namespace應該是com.abc.dao.NameMapper
介面的方法名,與xml中的一條sql標籤的id一致
比如,介面的方法List<User> findAll();那麼,對應的xml裡面一定有一條是<select id="findAll" resultMap="**">****</select>
如果介面中的返回值List集合(不知道其他集合也是),那麼xml裡面的配置,儘量用resultMap(保證resultMap配置正確),不要用resultType
最後,如果你的專案是maven專案,請你在編譯後,到介面所在目錄看一看,很有可能是沒有生產對應的xml檔案,因為maven預設是不編譯的,因此,你需要在你的pom.xml的<build></build>裡面,加這麼一段:
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

--------------------- 
作者:馬太胖 
來源:CSDN 
原文:https://blog.csdn.net/ppppfly/article/details/46847299