springboot项目启动报错:Field xxxMapper in com...xxxController required a bean of type ‘com...xxxMapper‘

问题现象:

今天在启动项目的时候发现了一个报错,如下:

Field xxxMapper in com...xxxController required a bean of type ‘com...xxxMapper‘


问题分析:

根据报错信息可以知道:

错误原因是:xxxMapper不存在与Spring容器中'';所以现在的问题就是把xxxMapper加入到bean容器中即可.

首先查看Controller层,查看是否有以下代码:

@Autowired
private JkMessageMapper jkMessageMapper;

上面的代码,就是用于在实现了JkMessageMapper注入到bean容器后可以自动创建该类对象,并交由bean容器管理;

通过查看xxxMapper接口,可以发现问题:因为Mapper接口类没有添加注解,导致spring容器并没有处理到这个接口类。

注意:

我的项目中是没有dao层实现类的,因为添加@Mapper注解后spring会自动将dao层实现类创建并注入bean容器中

总结:

如果用到了Controller(控制层),需要在Controller类上添加@Controller注解;

如果用到了Service(业务层)的话,需要在Service接口类上添加@Service注解

如果用到了ServiceImpl(业务层实现类),则需要在实现类上添加@Component注解;

如果用到了MapperImpl/DaoImpl(dao层实现类),则需要在实现类上添加@Repository注解,但如果在dao层接口类上添加了@Mapper注解的话,其实可以不需要dao层实现类了。


解决方法:

由于我这里只是忘记添加@Mapper注解了,其他配置都没有问题,所以只需要

在Mapper接口类(dao层)上添加@Mapper注解:

启动成功:


拓展:

从上门的分析可知,文章中提到的报错是因为bean对象注入失败导致的,那下面再说一下其他可能会导致该报错的原因: 

1、dao层xml文件(mybatis映射文件)中 namespace属性配置的路径和关联的dao层(接口类)文件的所在目录路径不一致。

(提示:在IDEA默认情况下,选择一个dao层xml文件(mybatis映射文件),可以通过按住ctrl键再点击映射的dao层(接口类)快速定位到所映射的dao层类,如果定位不到,则配置的路径有问题)。

2、没有设置dao层包路径识别注解(@MapperScan(dao层所在的包路径))

@MapperScan 注解可以加在数据源配置类上,或者是启动类上都可以。

作用是让spring容器在初始化时,去加载该注解所配置的包路径下的所有dao层类,生成对应的bean对象。 

3、没有设置dao层xml文件(mybatis映射文件)的路径。

假如项目中有数据源配置类,那最好是配置一下dao层xml文件的路径:

而如果没有数据源配置类,则需要在项目的 application配置文件中配置dao层xml文件的路径:

mybatis配置:

mybatis-plus配置:

  当然还有第3种配置方法,就是通过mybatis-config.xml配置文件也可以:

 然后还需要在application配置文件中添加mybatis配置文件的路径:

强烈建议不要第3种方式,来配置dao层xml文件的路径,因为你需要一个个去添加dao层xml文件(mybatis映射文件)的路径到mybatis-config.xml文件中的mappers标签中,太过麻烦和繁琐了!

初始化 SqlSessionFactory 数据源工厂对象的时候,加载该路径,作用是在创建dao层类的bean对象时,能提供一个实例对象以供初始化

  • 20
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
这个错误通常是由于缺少Swagger的相关配置或依赖引起的。为了解决这个问题,你可以尝试以下步骤: 1. 确保已经正确引入了Swagger的相关依赖。在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 2. 确保在Spring Boot的配置类中添加了Swagger的配置类。例如: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("your.package.name")) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Your API Title") .description("Your API Description") .version("1.0.0") .build(); } } ``` 确保将`your.package.name`替换为你的项目中包含API的实际包路径。 3. 如果你使用了多个Swagger相关的依赖或版本之间有冲突,可以尝试清理和更新你的项目依赖。可以使用`mvn clean`命令清理项目,并使用`mvn install`命令重新安装依赖。 如果上述步骤仍然无法解决问题,请提供更多的错误堆栈信息,以便更好地帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值