今天在將Mybatis框架集成進(jìn)Spring框架后派歌,做DAO層單元測試時(shí),發(fā)現(xiàn)報(bào)如下錯(cuò)誤:
org.apache.ibatis.binding.BindingException:Invalid bound statement (not found):xxx.xxx.xxx.xxx.Dao接口類
這類問題常規(guī)解決思路痰哨,要不就是寫XML的時(shí)候胶果,“namespace”屬性值對應(yīng)的類路徑拼寫錯(cuò)誤,或者接口類中定義的方法名和XML文件中定義的ID屬性不一致斤斧。
但讓人懊惱的是早抠,檢查了3~4遍,運(yùn)行單元測試撬讽,繼續(xù)報(bào)這個(gè)錯(cuò)誤蕊连。什么鬼?游昼?甘苍?
沒辦法,求助度娘烘豌,基本解決的思路和之前自己想的大同小異载庭。還有些同學(xué)的答案是在XML文件里打幾個(gè)空格、換個(gè)行云云廊佩。死馬當(dāng)活馬醫(yī)囚聚,試試吧,希望出現(xiàn)奇跡罐寨,但可惜沒有靡挥。
這里補(bǔ)充下我項(xiàng)目結(jié)構(gòu),如下:
src/main/java/自定義包路徑/mapper/xxxxxMapper.java|xxxxxMapper.xml
src/main/resources/相關(guān)配置文件等
怎么繼續(xù)鸯绿?突然想到查看下maven編譯出來的classes文件跋破,按目錄一查簸淀,居然發(fā)現(xiàn)xxxxxMapper.xml文件沒有出現(xiàn)在編譯后的class類路徑,也就是“自定義包路徑/mapper”的下面毒返。難道問題在這租幕,繼續(xù)試試吧。
既然作為資源文件的XML文件沒有編譯出來拧簸,那就給他挪挪窩劲绪,于是在resources文件下建目錄mapper,然后將xxxxxMapper.xml文件放到此目錄下盆赤。同時(shí)在配置文件添加屬性贾富,如下:
繼續(xù)單元測試,這次OK牺六,順利通過颤枪。
原來所有問題的原因就是maven在打包的時(shí)候,沒有將在classpath路徑下的資源文件打包到war包或者jar包導(dǎo)致淑际,所以解決方法也就應(yīng)運(yùn)而生畏纲。
或者也可以通過如下方法,通過在pom文件中聲明資源的方式春缕,可將在classpath下的資源文件打包進(jìn)war包或者jar包盗胀,如下:
今天這個(gè)問題,歸納起來就是锄贼,先檢查Mybatis配置文件的時(shí)候票灰,類路徑或者接口方法對應(yīng)ID是否出錯(cuò);如果這樣找不到問題咱娶,那就要看看你所包含在項(xiàng)目里的資源文件是否在maven打包的時(shí)候打包進(jìn)項(xiàng)目中米间,通過以上查找,這個(gè)問題應(yīng)該基本可以避免膘侮。
PS:接下去有空屈糊,上來補(bǔ)充一篇關(guān)于項(xiàng)目中資源文件查找路徑的文章,歡迎關(guān)注琼了!