解決org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
阿新 • • 發佈:2018-11-30
解決org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
作為新手在學習SpringBoot時,為了用複雜sql語句去使用xml配置sql的引數,結果遇到了這樣的異常,網上搜索到原因是Mapper.java檔案與Mapper.xml檔案對應資訊不在這裡插入程式碼片一致,解決方案如下:
1:檢查兩個檔案是否在同一個包中(如果有指定xml檔案,則不需要考慮這點)
2:檢查xml檔案的namespace是否和xml檔案的package名稱一一對應
3:檢查函式名稱與xml檔案中的id能否對應上
4:檢查函式的引數型別以及返回型別與xml檔案能否對應上
5:去掉xml檔案中的中文註釋
6:隨意在xml檔案中加一個空格或者空行然後儲存
上述方法都排除了之後,搜到其他解決方案。因為我是將xml檔案放在resources目錄下的,可能是因為IDEA沒有掃描到resources目錄中*Mapper.xml檔案,同時無法將配置檔案載入到classes目錄下,這種情況的解決方案:
<build> <resources> <!-- maven專案中src原始碼下的xml等資原始檔編譯進classes資料夾, 注意:如果沒有這個,它會自動搜尋resources下是否有mapper.xml檔案, 如果沒有就會報org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.pet.mapper.PetMapper.selectByPrimaryKey--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--將resources目錄下的配置檔案編譯進classes檔案 --> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
然而上面各種方法試了都沒有用,target的dao檔案下面還是隻有class檔案,沒有xml檔案
調了兩天,走投無路,去pom.xml中看了下配置,發現有一個依賴的配置是這樣的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
發現其他依賴大多沒有<scope>
<scope>runtime</scope>
(當初是在spring官網生成的包,就沒想著要改)於是去查它是什麼意思:
scope標籤引數:
- compile
預設的scope,表示 dependency 都可以在生命週期中使用。而且,這些dependencies 會傳遞到依賴的專案中。適用於所有階段,會隨著專案一起釋出 - provided
跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。這個scope 只能作用在編譯和測試時,同時沒有傳遞性。 - runtime
表示dependency不作用在編譯時,但會作用在執行和測試時,如JDBC驅動,適用執行和測試階段。 - test
表示dependency作用在測試時,不作用在執行時。 只在測試時使用,用於編譯和執行測試程式碼。不會隨專案釋出。 - system
跟provided 相似,但是在系統中要以外部JAR包的形式提供,maven不會在repository查詢它。
說實話,沒看懂,以後再說吧,把<scope>
這個標籤刪掉,更新Maven工程,重新編譯,xml檔案神奇的出來了,問題解決: