本次問題最終解決
查了很多資料,下面轉載幾乎是最全的一份資料,但仍未找到原因。最終對比現有項目結構,發現最終問題:由于Mybatis在自動生成model,mapper,和xml檔案時,并未将mapper和xml配置在同一個包下,進而導緻無法找到xml檔案。解決辦法,Mybatis的generator.config檔案中配置在同一包下。或者再生成檔案後,手動調整
一、說明
造成MyBatis報Invalid bound statement (not found)錯誤有很多種,主要原因就是xxxMapper.java與xxxMapper.xml沒有正确綁定。沒有正确綁定的原因有很多種,是以導緻有些人在網上百度查詢到别人的部落格上寫的解決方法之後卻無法解決自己的問題,在此作一些方法總結。
二、錯誤産生原因及解決方法
2.1 映射xxxMapper.xml檔案未被掃描
如果你使用的是Maven建構的項目,那麼因為maven預設隻是加載src/main/resources目錄下的配置檔案,并不會主動加載src/main/java下的配置檔案。如果你的Mybatis映射xml檔案是與接口檔案放在同一目錄下的話,就必須在pom.xml檔案中加以上以下配置:
- <!-- 如果不添加此節點mybatis的mapper.xml檔案都會被漏掉。 -->
- <build>
- <resources>
- <resource>
- <directory>src/main/java </directory>
- <includes>
- <include>**/*.properties </include>
- <include>**/*.xml </include>
- </includes>
- <filtering>false </filtering>
- </resource>
- </resources>
- </build>
2.2 接口名稱與xml映射檔案名稱不一緻
請檢查你的的xxxMapper.java檔案與xxxMapper.xml檔案名稱是否一緻;
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lcd3aU9Ee4EjYox2RiZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TOzYjNzcjM0EzNyETM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
2.3xml映射檔案中的namespace配置錯誤
namespace必須等于接口的完整類名
2.4 xml映射檔案中的select/delete/update/insert等标簽的id值與接口中的方法名稱不一緻
2.5xml映射檔案中的select/delete/update/insert等标簽的parameterType的值與接口中的方法的參數的類型不一緻
2.6 xml映射檔案中的select/delete/update/insert等标簽的resultMap的type或resultType與接口中的方法的傳回參數的類型不一緻
2.7xml映射檔案中的select/delete/update/insert等标簽中的databaseId的值在spring配置檔案中未找到
以上整理的錯誤産生的原因并不全,以後再發生此問題如果不是以上收集的幾點時我會再作補充。