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

解決org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

解決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檔案神奇的出來了,問題解決:
在這裡插入圖片描述