首頁 > 軟體

SpringBoot使用MyBatis-Plus解決Invalid bound statement異常

2022-09-30 14:02:11

前言

本篇文章主要介紹關於我在SpringBoot中使用MyBatis-Plus是如何解決Invalid bound statement (not found)這個異常的。我先拋一些我在這個途中遇到的一些問題,看看各位瞭解不瞭解。

  • Mybatisxml檔案不在resouce下時該如何設定。
  • 如何去指定mapper-Location的設定。
  • classpath*classpath的區別是啥
  • Invalid bound statement (not found)出現的原因是什麼

以上就是我遇到這個問題之後總結的三個問題。

緣由

作者來了一下新公司,這邊的框架看的我很悶,特別是關於mybatis的一些用法。這邊的sql都是用註解寫在Mapper檔案上。

例如:

 @Select("SELECT id,status, " +
            " actual_usage_id usage_id," +
            " location_id ," +
            " group_id ," +
            " breakdown_Level_id, " +
            " receive_persion_id " +
            "FROM " +
            " t_repair_workorder  " +
            " ${ew.customSqlSegment} ")
    List<IndexDutyPageVo> dutyFaultPage(@Param(Constants.WRAPPER) Wrapper<?> wrappser);

整個專案全是這種寫法,我一開始以為是規範。後面問了一個老員工才知道。說以前這個專案是寫在xml的,但是後面改了一下架構之後xml的設定就掃描不到了。嗯嗯嗯…

這邊的專案結構,xml檔案不是放在resouce下,並且具體的業務包是跟maven引入進去的(這個就是我前文提到的架構改變了)。注意這兩個是重點。我猜測他們不會設定的點應該就是這個原因了吧。

解決問題

竟然知道了問題就開始解決問題。

Mybatisxml檔案不在resouce下時該如何設定。

Mybatis中如果xml檔案不在resource目錄下的話,預設打包是會被忽略的,所以需要在pom檔案中加一段設定。

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

改完這個後重新build一下,注意去檢視下target資料夾下是否xml檔案。

如何去指定mapper-Location的設定

mybatis-plus:
  mapper-locations: classpath*:top/**/*.xml
## top是我具體資料夾可以不要,  **的意思代表一個或者多個目錄

classpath*classpath的區別是啥

這個問題是重點要考的記一下,帶*的話會掃描jar包下面的檔案,不帶*只會掃描當前專案。

Invalid bound statement (not found)出現的原因是什麼?如何排查這個問題

這個報錯的出現,就是代表你的mapper檔案跟xml對映不到。如果你確保你的框架沒有問題下,其它的程式碼都能對映得到的情況,那麼你就要注意了,首先你的xml檔案的名字跟Mapper檔案是不是一致的,方法名跟xmlid是不是一致的。如果你這兩個都對了,再去查你的mapper-locations的設定,這裡沒問題,再去查編譯包。看看xml編譯到了不。如果這些都沒問題。那人跟程式碼只要一個能跑就行。

總結

其實使用xml跟使用註解的形式都能完成需求,沒多大的區別。但是使用xml的可讀性,以及易維護性。個人覺得比註解方式強太多了。此次問題的出現,關鍵在於架構的改變,架構者一想把xmlresource移除,二又想把業務模組熱插拔。這個想法是好的。但是做事做一半真的不太可取。

到此這篇關於SpringBoot使用MyBatis-Plus解決Invalid bound statement異常的文章就介紹到這了,更多相關SpringBoot 異常內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com