报错信息
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文件存放地址一致,那么就是没有问题了。