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

好豬都去拱大白菜了發表於2018-09-20

自己使用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檔案扔進新建立的目錄下。

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

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

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

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

相關文章