報錯資訊
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
第四個,配置讀取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中,代表沒有問題。
當你看到,class檔案和xml檔案存放位址一緻,那麼就是沒有問題了。