报错信息

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

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐