前一篇文章我總結了一下MyBatis-Spring項目使用SqlSessionTemplate配置的用法,其實在測試過程中並不是一帆風順,遇到了很多的問題,最主要的就是Mapped Statements collection does not contain value for...這個異常信息,具體如下:
看這句話的意思就是找不到這個方法,那肯定是配置的問題,於是我從頭開始檢查,我的檢查項如下:
- 檢查映射器配置文件中的命名空間是不是對應接口的全限定名;
- 檢查映射器接口中的方法、參數、返回類型和對應mapper.xml文件中sql語句的id一致(重新復制了一下);
- 檢查是否將mapper.xml文件添加到我在SqlSessionFactory(spring中配置)中配置的configLocation值對應的MyBatis配置文件中;
- 檢查我傳入SqlSessionTemplate中的sql路徑是否是命名空間+sqlId;
- 檢查在SqlSessionFactory(spring中配置)中配置的configLocation值是不是我配置的mybatis配置文件;
以上的檢查項可以說是很全了,但是再次測試,問題依然存在,我真的是腦瓜疼,於是決定不跟它硬碰了,大晚上,還是看看劇好了,於是刷完劇呼呼大睡去了,直到今天早上起來,開始再一次面對這個可惡的bug。其實我上面的mybatis配置文件是mybatis-config2.xml,專門為了測試這種方式新建的,還有另外一個MyBatis-config.xml文件,這是測試其他功能建的,按理說我在我的spring中配置的是mybatis-config2.xml這個,所以MyBatis-config.xml里面的配置是不會影響我測試的,但我還是抱着試一試的心態將我的mapper.xml文件放了一份在MyBatis-config.xml里面,測試了一下,哎,好了!!!於是我想難道其作用的是這個文件,於是我把mybatis-config2.xml,也就是真正使用的,這里面的mapper.xml文件注釋掉,再次測試,問題又出現了!!所以說即便我用的是mybatis-config2.xml,但是在另一個mybatis-config.xml中也要引入mapper.xml文件,反正就這樣解決了,雖然我覺得不太合理,但是沒辦法,就是這么神奇!