1. 程式人生 > >SpringBoot整合MyBatis——Could not autowire.No beans of 'xxxMapper' type found.(期待網友共同編輯)

SpringBoot整合MyBatis——Could not autowire.No beans of 'xxxMapper' type found.(期待網友共同編輯)

遇到這個問題困擾了我好幾天,其實之前剛開始學習SpringBoot與MyBatis整合的時候,也遇到過這個問題。現在是第二次犯這個錯誤了,然而卻不是明知故犯,是慢慢被自己坑進來的。讓我們來看一下這個問題吧。可能總結的不是很全面,歡迎各位給我指出來,讓解決該類問題的這篇部落格變得更加詳細起來,幫助更多的學習者解決該類問題,這就是寫該部落格的初衷

IDEA版本2018.2

首先,是IDEA本身的問題,我這個程式是可以正常執行起來的,而這個studentMapper的Bean是存在的,並且可以自動注入
在這裡插入圖片描述

所以有強迫症的可以網上查詢,如何取消該紅色的錯誤提示,這裡就不提供方案了。

這是我的DAO的註解,注意我使用的是@Mapper,後面會講解@Repository
在這裡插入圖片描述

這是我的啟動類的掃面
在這裡插入圖片描述

第二種方式,使用@Repository,去除剛才的紅色錯誤提示
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
使用@Repository後,發現紅色錯誤提示沒有了,所以本人現在比較推薦@Repository。

就因為這個錯誤使自己陷入了很多沒必要的坑,但問題都是圍繞這個bug的,因為一直糾結這個錯誤嘛,因為我們知道開發工具是不會有錯誤的,有錯誤的是程式設計師自己嘛!!!

緊接著就回到了我第一次遇到的問題,無法裝配mapper的bean。而這個我之前是解決了的,只是用了書中作者的原始碼,而忽視了那個配置。

這個跟新版的idea有關,本人使用的版本是2018.2。由於新版的idea預設是不編譯java下的xml檔案的,由於程式設計師都習慣將mapper與xml放在同一個目錄下而導致了無法編譯xml,致使無法注入相關的Bean。而eclipse卻可以這樣做,所以使用idea開發的同志們就需要注意了。

在pom.xml中,新增如下配置

		<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>

在這裡插入圖片描述

然後檢查一下,target目錄下是否有xml的編譯檔案,有的話則說明編譯成功。

在這裡插入圖片描述
其他相關問題:
1.org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.springboot.dao.StudentMapper.insertStudent 無效繫結語句(未找到)
出現這個原因,需要檢查下namespace的對應的dao的全限定名是否正確,我這裡故意寫少了一個 " r ",就報了這個錯誤。
在這裡插入圖片描述

假如,我的mybatis對映檔案的掃描路徑寫錯了,比如我這裡缺少了個 “ r ”。也會報這個 “無效繫結語句(未找到)”。
在這裡插入圖片描述
2.假設我建立了一個相同的StudentMapper.xml,只是命名不同,但裡面的內容完全是一樣的,那又會報什麼錯誤呢?
在這裡插入圖片描述

錯誤資訊如下(這裡擷取關鍵的詳細資訊):

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘studentMapper’ defined in file…
Error creating bean with name ‘sqlSessionFactory’ defined in class path resource…
Failed to parse mapping resource. …
Error parsing Mapper XML…
Mapped Statements collection already contains value for com.test.springboot.dao.StudentMapper.getStudent…

這麼一大堆錯誤,說白了,就是不知道對映到哪個對映檔案,所以要確保對映檔案的唯一性,否則找半天都不知道啥問題。

3.Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘studentMapper’ defined
Caused by: java.lang.IllegalArgumentException: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

另外,如果出現了這兩個異常的話,建議檢查下你的啟動類上是否加了這句,如果加了,建議把它 刪除 掉,否則會一直報上面的異常。我之前加這個的原因是因為找不到資料來源的url。網上找到了這個解決的方案,結果加了這句後,錯誤是沒了,但是報上面的異常的,讓我不得不懷疑mapper的配置了,以致於一直在做無用功。
在這裡插入圖片描述

好了,基本總結如上所述,如果我的總結有錯誤的話,歡迎指出。假如上述的方案沒有讓您的問題解決的話,歡迎在下方給我留言,並且 提出您的類似問題或方案 ,讓解決這類問題的本部落格更加詳盡,以幫助那些遇到該問題的朋友儘快解決問題