Spring整合mybatis注解掃描是否成功
IDEA spring整合mybatis會使用注解掃描的配置
<context:component-scan base-package="/>
不管是使用@ Component、@Service、@Controller還是Repository,都是spring ioc操作bean的注解,其實際功能都是一樣的,都是用來創建bean實例對象的。
正常情況下,如果自動掃描陳宮,IDEA類的界面在左側會有綠色的C標記,如圖所示。
AutoWired注解下面的類屬性左側也會有一個灰色的箭頭和綠色的圓的標記,如果沒有配置成功,那么就不會有這兩個標記。
對于沒有配置成功的情況,可以點擊Project Strcuture ,點擊modules,模塊的srping部分,點擊圖中的加號,選擇模塊下面框里的所有xml文件,導入就可以了。
Mybatis注解@MapperScan掃描包報:Invalid bound statement (not found)
前幾天,因為無知,將@MapperScan的路徑修改到dao的上一層,如下:
在此情況下,對dao層進行Junit測試,測試通過;但對service層測試,則報錯,報錯如下:
于是乎我就找了度娘,很多老鐵也給了各種解決方法(以下解決方法取自網絡):
1.檢查xml文件所在package名稱是否和Mapper interface所在的包名。
2.UserDao的方法在UserDao.xml中沒有,然后執行UserDao的方法會報此。
3. UserDao的方法返回值是List<User>,而select元素沒有正確配置ResultMap,或者只配置ResultType。
4. 如果你確認沒有以上問題,請任意修改下對應的xml文件,比如刪除一個空行,保存,問題解決。
5.看下mapper的XML配置路徑是否正確
但是我沒有在上面的描述中解決我所報的錯誤,而我又是用springboot的注解模式的,于是我就對報錯中的cachedMapperMethod
進行debug測試,找到了問題所在。
通過Junit測試dao層,得到debug相關信息,并沒有任何異常,如下:
通過Junit測試service層,得到debug相關信息,如下所示,發現了問題所在,service接口也被mybatis接管了,而@MapperScan
作用:指定要變成實現類的接口所在的包,然后包下面的所有接口在編譯之后都會生成相應的實現類。
總結
使用Mybatis的注解@MapperScan需要制定到項目中的dao層,避免其他的接口也被接管了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/Tec_Xie/article/details/119208155