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

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

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

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

【1】spring

網上總結的通常緣由 Mapper interface和xml文件的定義對應不上,須要檢查包名,namespace,函數名稱等可否對應上。 按如下步驟一一執行:
一、檢查xml文件所在的package名稱是否和interface對應的package名稱一一對應
二、檢查xml文件的namespace是否和xml文件的package名稱一一對應
三、檢查函數名稱可否對應上
四、去掉xml文件中的中文註釋
五、隨意在xml文件中加一個空格或者空行而後保存
sql

【2】瀏覽器

在使用IDEA開發時,若是打包時*Mapper.xml沒有自動複製到class輸出目錄的mapper類包下,則須要在pom文件中添加mybatis加載配置文件的配置! 以下:springboot

<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加載配置文件,完美解決遇到的問題了。bash

【3】mybatis

在application.yml中修改:app

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接口放到一個目錄下來了,瀏覽器中訪問接口,接口也訪問通了。

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

相關文章
相關標籤/搜索