本來準備研究下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>節點萬事大吉