記錄報錯內容以及如何修改(mapper包下面的對映檔案掃描不到)

孟昊發表於2024-03-12

這個錯誤是在使用mybatis和mapper的時候發生的,一般報這種錯誤都是因為配置不匹配,或者是寫錯了路徑,或者是寫的sql語句有了問題,但是我檢查了很多遍都沒有發現任何有關語句和路徑的錯誤。

排除了這些低階錯誤的可能後,這裡會報錯的原因也基本就只有一個了,那就是mapper介面和mapper.xml檔案沒有對映起來,沒有成功。

針對這個問題:

我首先檢查了xml檔案裡的namespace是不是和mapper的實際位置一樣,檢查之後發現確實沒問題:

這一步基本不會出錯,因為我們都是使用外掛(MybatisX)創造的檔案,所以檔名字和路徑是不會出問題的

同樣的道理,sql語句中的select id 所輸入的方法名字也是不會有錯誤的,因為都是外掛幫我們建立的檔案,我們甚至都沒有自己動手打字,所以不可能出現自己輸入錯誤的情況。

繼續找錯誤的原因,網上查了一下,有可能是我們執行時沒有把xml檔案構建進去,所以導致執行的時候找不到,我檢查了一下執行時候的配置:

發現他確實在執行的時候沒有掃到這個xml檔案,但我確確實實在yml檔案裡面配置了在執行時要掃描mapper目錄下的檔案,真是讓人費解。

雖然解決方法很簡單,只需要在執行的時候手動把mapper用到的xml檔案放進去就好。

話雖如此,每次執行都要手動新增xml檔案有點太離譜了,所以還是有必要找一找最根本的原因是出在了哪裡。

經過網上查閱資料,我發現mybatis和mybatis-plus的依賴是有衝突的,可惜我的專案根本沒用到plus也沒有匯入他的依賴,所以原因不是這個。

終於!!在配合網上攻略檢查我的配置檔案時,我發現我之前寫的程式碼有點多餘,而且我不知道他們是幹什麼用的,這引起了我的好奇:

詢問了GPT後得知:

重點來了,最後一行他說“並且不進行任何佔位符替換處理”,意味著我使用 * 來掃描mapper包下面的所有檔案的方法是行不通的。看來這行filter程式碼就是罪魁禍首。把false改成true或者直接刪掉這行程式碼就解決了問題!!重新執行專案,發現mybatis的xml檔案出現在了target目錄裡,完美~

相關文章