Spring Boot + MyBatis No qualifying bean of type

記錄一個今天同事遇到的BUG,以前也遇到過,但是當時沒有記錄,結果浪費了兩個小時時間處理這個BUG。

項目是Spring Boot + MyBatis,項目包結構如下:


代碼報錯爲:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.jy.common.base.BaseMapper
	<com.jy.affairs.entity.CompanyManage>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: 
	{@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
	... 32 more

說我沒有定義Bean。

No qualifying bean of type 
檢查了一遍又一遍的代碼,我定義了啊!沒毛病啊!Pom裏面該引入的都引入了啊!MybatisConfig文件也寫的沒毛病啊!

檢查了一個小時...

後來想起來以前解決過類似的問題,當年那是在做SpringMVC+MyBatis結合的項目的時候,也出過這種詭異的事情。問題出在我的項目目錄結構有問題,

或者說我的MybatisConfig文件的掃描註解路徑有問題。包結構看上面... MyBatisConfig代碼如下:

@Configuration
@MapperScan("com.jy.affairs.mapper.*")
public class MybatisConfig {


    @Autowired
    private Environment environment;
    private RelaxedPropertyResolver propertyResolver;
    @Autowired
    private DataSource dataSource;
    @Autowired
    private MybatisProperties properties;
    @Autowired
    private ResourceLoader resourceLoader = new DefaultResourceLoader();
    @Autowired(required = false)
    private Interceptor[] interceptors;
    @Autowired(required = false)
    private DatabaseIdProvider databaseIdProvider;
註解的路徑是:

@MapperScan("com.jy.affairs.mapper.*")
MyBatis的Mapper掃描路徑是指的包名,* 不代表類,代表的是包,而項目中的Mapper類都在com.jy.affairs.mapper包下面,並沒有再向下的層級,所以Mybatis沒有掃描到Mapper類,就報了剛纔的錯誤。

解決辦法:

根據項目情況,是同事在建包結構的時候有問題,所以不改註解中的路徑,而是修改包結構,修改爲:


再次Run,成功!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章