1. 程式人生 > >IDEA+Maven+Springboot:invalid bound statement (not found) 解決辦法

IDEA+Maven+Springboot:invalid bound statement (not found) 解決辦法

自己使用Springboot搭建web專案,之前都是使用註解形式來執行sql獲取查詢內容,這次本承著閒得無聊試一試的想法,突發奇想想用xml的方式執行sql。很走心的參照自己之前spring專案的書寫格式,順便百度了也就幾十個springboot搭建的問題,終於把xml的相關配置弄好。天知道,get請求通過瀏覽器訪問介面怎麼就報了invalid bound statement (not found)的錯誤。

OK,這點小事怎麼難得住我,接著在度娘和谷哥之間換了千百種姿勢找解決方案。總結出以下這幾種方法,可以解決大多數invalid bound statement (not found)的問題:

======================== 華麗的分割線 ===========================

【1】

網上總結的一般原因
Mapper interface和xml檔案的定義對應不上,需要檢查包名,namespace,函式名稱等能否對應上。
按以下步驟一一執行:
1、檢查xml檔案所在的package名稱是否和interface對應的package名稱一一對應
2、檢查xml檔案的namespace是否和xml檔案的package名稱一一對應
3、檢查函式名稱能否對應上
4、去掉xml檔案中的中文註釋
5、隨意在xml檔案中加一個空格或者空行然後儲存

【2】

在使用IDEA開發時,如果打包時*Mapper.xml沒有自動複製到class輸出目錄的mapper類包下,則需要在pom檔案中新增mybatis載入配置檔案的配置!
如下:

<build>
  <resources>
    <resource>
        <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
</build>

通過在pom檔案中新增mybatis載入配置檔案,完美解決遇到的問題了。

【3】

在application.yml中修改:

mybatis:
  mapper-locations: classpath:mybatis/mapper/mysql/*.xml

======================== 華麗的分割線 ===========================

 

以上是總結谷哥和度娘上輸出最多的解決方案,但我自己專案的問題其實遠比上述解決方案要顯得白痴:

如第【2】中解決辦法所說,編譯後的xml檔案沒有輸出到mapper包下,就在各種找方案,怎麼能達到這種效果。

嘗試過第【2】種方案無果,後嘗試重新使用註解的方式,發現sql正常執行,說明註解的方式可以使用,那一定是xml檔案的方式哪裡配置的不對。

再後來直接把xml檔案放到mapper包下,發現編譯後xml檔案就輸出到了mapper包下,說明把xml和mapper介面放在一個目錄下是能解決這個問題的。不過一個目錄下既放xml又放java檔案感覺很奇怪,就繼續找方法,看怎麼能把xml檔案和mapper分開,但是編譯後的檔案放在一個目錄下,也就是xml方式可以正常進行正常的sql使用。

在百度無果幾近絕望的時候,偶然一篇帖子彷彿讓我看到了希望的曙光。裡面說idea編譯器中資料夾要一層一層的建立,一次性把整個目錄創建出來中間妄圖用“.”分隔開,編譯器是不識別的。所以將信將疑的嘗試著在resources目錄下對應mapper介面的目錄層級,一層一層把對應目錄也創建出來,最後把xml檔案扔進新建立的目錄下。

奇蹟真的發生了~~!!!!!!

就這樣,編譯後xml和mapper介面放到一個目錄下來了,瀏覽器中訪問介面,介面也訪問通了。

真是山重水複疑無路,絕望盡頭就是柳暗花明處。