自己挖的坑跪著也要填完---mapper配置檔案和java原始檔在同一包下

白露非霜發表於2019-07-06

本來準備研究下mybatis原始碼執行流程的,就隨意搭建了個專案,所有配置如下:

 

 

一切看似都是那麼的正常,然而執行的時候:Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.nijunyang.mybatis.mapper.UserMapper.insertUser

 

 1.發現org.apache.ibatis.session.Configuration#mappedStatements始終是空的,等於說mapper檔案的類容根本沒有被載入解析

 

 

2.org.apache.ibatis.builder.annotation.MapperAnnotationBuilder#loadXmlResource載入xml根本沒有載入到

3.檔案路徑看似都是對的,但是卻載入不到檔案流org.apache.ibatis.io.Resources#getResourceAsStream(java.lang.ClassLoader, java.lang.String)

各種找問題,以為是名字不對等等,重新寫各項配置,結果還是不行。最後恍然大悟,這配置檔案是用classloader載入的,遂檢查jar包(class目錄)發現mapper.xml檔案根本沒有編譯進去,再看pom檔案,資原始檔的打包配置空空如也。

 

所以看似正常的xml檔案路徑,實則並不正常,因為在jar/class裡面並沒有將配置檔案打進去

 因此在原始檔包裡面寫配置,pom檔案一定要注意加上打包資源的配置

因此在原始檔包裡面寫配置,pom檔案一定要注意加上打包資源的配置

因此在原始檔包裡面寫配置,pom檔案一定要注意加上打包資源的配置

預設的編譯只會將java原始檔編譯出來的class檔案打包走,而不會打包其他檔案,擼上<resources>節點萬事大吉

 

相關文章