Spring 整合 MyBatis,Mapper注入失敗

出現問題,分析原因

今天拿出在做的項目,啓動運行,報錯:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.liu.dao.UserInfoMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

打開Service層代碼,注入UserInfoMapper的代碼沒有異常,於是我腦海中想到可能是下面的幾個問題:

  1. spring-mybatis整合配置文件沒有掃描到
  2. 沒有掃描到mapper.xml文件
  3. mapper.java和mapper.xml之間沒有聯繫起來
  4. spring-mybatis整合配置文件中,配置的屬性值在properties文件中,但是該properties文件沒有掃描到或者是值錯誤(但是這個一般控制檯都會鎖定到屬性值錯誤,可能性不大)

解決問題

1、檢查spring-mybatis配置文件,在web.xml中已經配置掃描到了,謹慎起見還是檢查一下:

ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:META-INF/config/spring/spring-mybatis.xml");
UserInfo bean = ac.getBean(UserInfo.class);
bean.getUserInfoById(10001L);

在service的初始化方法中,執行上述代碼,是沒有問題的,所以配置文件是掃描到了的,排除第一個原因

2、 檢查spring-mybatis配置文件

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:META-INF/config/mybatis/sqlmap.xml" />
        <property name="mapperLocations"
                  value="classpath:com/liu/dao/mapping/*.xml" />
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage"
                  value="com.liu.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

沒有問題

3、檢查UserInfoMapper.java和UserInfoMapper.xml文件,發現UserInfoMapper.xml中對po的配置路徑是:

com.liu.po.com.liu.po.UserInfoMapper.java

所以問題出現在這裏,mapper之間沒有聯繫起來,導致注入失敗,這個問題的產生是上一次項目關閉前,手賤改了一下包路徑,IDEA卻給我重複了路徑。。

發佈了177 篇原創文章 · 獲贊 405 · 訪問量 94萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章