天天看點

idea報錯Could not autowire. No beans of ‘XXXXMapper‘ type found【已找到出錯原因】

報錯資訊

Could not autowire. No beans of 'rulesMapper' type found. less... (Ctrl+F1)  Checks autowiring prob

問題所在:

經過我的排查,發現沒有任何代碼上的錯誤,mybatis中interface和xml之間的關系也正常,但是當在@Service中調用Mapper,

不論是使用@Autowired和@Resource都發現錯誤提示,啟動springboot也報找不到該類等等

根據我的推測,應該是mybatis的規範,硬性要求了mapper.xml檔案中不能出現接口中沒有的方法,即便是注釋掉的方法也不行,我的問題就是出現在這裡了,xml檔案中有注釋的代碼,mybatis識别不了,導緻interface和mapper.xml無法建立正确的聯系,導緻不能比對方法,産生出找不到mapper檔案的錯誤提示。
           

看到這裡,趕緊看看你的代碼中的mapper檔案和xml是否有沒有關系一對一映射的,如果有,那麼恭喜你,問題能夠解決。

還有@Mapper注解也有問題,@Component

第一個,pom

<!-- 如果不添加此節點mybatis的mapper.xml檔案都會被漏掉。 -->
    <bind>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.*</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
    </bind>
           
第二個,mapper的java加上這兩個注解
           
package com.hikktn.drools.mapper;

@Component
@Mapper
public interface RulesMapper {

}
           

第三個,application.yml

注意,mapper.xml檔案不管放到那個檔案下,都要與interface的包路徑一緻,否則無法生效。

# mybatis配置
mybatis:
  # 配置SQL映射檔案路徑
  # 類的别名的包
  type-aliases-package: com.hikktn.drools.entity
  mapper-locations:
    classpsth*: com/hikktn/drools/mapper/*Mapper.xml
           
idea報錯Could not autowire. No beans of ‘XXXXMapper‘ type found【已找到出錯原因】

第四個,配置讀取mapper檔案的配置

package com.hikktn.drools.config;

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        //指定xml配置檔案的路徑
        mapperScannerConfigurer.setBasePackage("com.hikktn.drools.mapper");
        return mapperScannerConfigurer;
    }

}
           

第五個,檢查xml中的namespace類名是否一緻,按住ctrl鍵選中類名,隻要能夠點選到正确的java中,代表沒有問題。

idea報錯Could not autowire. No beans of ‘XXXXMapper‘ type found【已找到出錯原因】

當你看到,class檔案和xml檔案存放位址一緻,那麼就是沒有問題了。

idea報錯Could not autowire. No beans of ‘XXXXMapper‘ type found【已找到出錯原因】