(已解決)確定mapper配置無誤,且配置檔案無誤, 執行無誤 出現org.apache.ibatis.binding.BindingException: Invalid bound statemen

浮~沉發表於2020-11-03

(已解決)確定mapper配置無誤,且配置檔案無誤, 執行無誤 出現org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解決方案 – 常見於多模組服務部署下(適用於一個Tomcat例項部署情況)

如果著急修改錯誤 直接看程式碼部分哦


故事回放

今天又是老司機翻車的一天: 最近在做一個基於Maven多模組專案, 依仗著自己多年橫趟單模組實現SSM的經歷, 覺得多模組僅僅就是1 + 1 = 2的問題, 哪層料想, 這樣天真的想法被現實一頓毒打

拿著以往的配置, 在maven的各個模組一頓CV操作, 是真的香; 只可恨maven看不慣你這麼舒服 非要搞你心態:

好不容易做完一個業務邏輯,準備啟動部署測試, 整個過程一氣呵成, 沒有任何錯誤 非常順利, 這個順利甚至讓我以為自己已經是大佬了嗎(居然可以一次性部署成功)

開啟postMan興高采烈在url上一頓準備測試, 心中早已預判了點下send按鈕的出現喜悅畫面已經想好如何吹逼自己牛b的時候. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)當頭棒喝 (藍瘦香菇)

本能地以為就是自己那裡CV操作有誤(還沉浸在自己一統單模組部署ssm的世界裡, 無法自拔) 1個鐘頭過去了,沒有任何進展 於是乎打算一一對比配置檔案 甚至還一一對應mapper檔案,就這樣 2個鐘頭過去了仍然解決不了, 心態開始崩了 終於放下最後的倔強(我是大佬, 我可以自己解決的) 求助度娘

結果都在說要麼是配置檔案寫錯了, 要麼包匯入錯了 要麼mapper檔案(初學者必踩)寫錯了 總之搜了一圈大同小異, 沒有實質進展

後來我開始轉而去找其他人做的多模組專案 對比Maven配置檔案(也許是出於經驗, 我本能的想到多模組下maven的特殊性可能會出現一些問題) 終於在一個大佬的配置中發現了 一個不起眼的引數配置

 <filtering>true</filtering>

為了便於理解我貼出它的精確位置

 <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
     			
                <filtering>true</filtering>
    </resource>

起初我沒太在意這個東西, 因為自己曾經也用過maven部署web專案 沒有加入過這個配置 也能訪問 所以沒怎麼care, 後來實在是沒轍了 就死馬當活馬醫,

結果是加入後瞬間起飛 : 一方面感動自己 一方面懵逼良久


究其原因

首先這個引數的含義是: 啟動配置檔案中的**${}**過濾 比如我們在配置檔案常常定義一些引數 最常見就是db.properties的驅動引數

你在spring的配置檔案中使用時是不是採用**${}**進行訪問 它的作用就是開啟這個符號的識別(預設是關閉的)

那為啥以前不用配置 也能正常訪問?

以下內容為筆者推斷不具備真實性, 請慎重考慮

  • 我首先想到以前我們處理的專案就只有一個web模組 也就是說所有有關的配置檔案都在一起, 那麼maven完全可以基於單模組自動識別 同一個resource下的資源

  • 而多模組下, 我們有好幾個web模組也就是說會有多個resource目錄 那maven就無法判斷了(詳見註解)如果你用${}去訪問資源 那麼到底訪問那一個資源呢(比如同時依賴db.properties進行資料庫的訪問) 所以maven在開啟了pom.xml的一個引數配置filting 如果顯示指定為true那麼肯定是訪問當前模組的資源目錄

    注意:這裡無法判斷是指 在同一個Tomcat環境下 部署多個war 或者說多模組啟動都是基於一個Tomcat例項 如果你是把多模組部署分別在不同的tomcat裡那麼 本文自動失效

    以上就是筆者的大膽推論, 至於驗證就留待以後解決,如果各位童鞋有確定的想法可以在評論留言哦!


彩蛋

有沒有童鞋還不會配置tomcat同時部署多個war或者雖然你部署了多個但是隻能啟動一個吶?

原因很簡單: 看截圖哦

在這裡插入圖片描述

在這裡插入圖片描述

看懂了嗎 現在可以啟動了 進行的玩耍你的多模組專案吧!

相關文章