解决springboot项目启动报错Field xxxMapper in com...xxxController required

 更新时间:2023年12月07日 15:50:32   作者:Stephen·You  
这篇文章主要介绍了解决springboot项目启动报错Field xxxMapper in com...xxxContr问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题现象

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

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对象时,能提供一个实例对象以供初始化

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus中@TableField和@TableId说明

    MyBatis-Plus中@TableField和@TableId说明

    文章详细介绍了Mybatis-plus中常用的注解及其用途,包括@TableField、@TableId等,通过这些注解可以解决字段不一致、字段不显示、忽略字段以及主键查询等问题,从而提高开发效率和数据安全性
    2026-01-01
  • java.io.EOFException: Unexpected end of ZLIB input stream异常解决

    java.io.EOFException: Unexpected end of 

    本文主要介绍了java.io.EOFException: Unexpected end of ZLIB input stream异常解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • java实现登录案例

    java实现登录案例

    这篇文章主要为大家详细介绍了java实现登录案例的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 解决MyEclipse中的Building workspace问题的三个方法

    解决MyEclipse中的Building workspace问题的三个方法

    这篇文章主要介绍了解决MyEclipse中的Building workspace问题的三个方法,需要的朋友可以参考下
    2015-11-11
  • 如何利用Jackson序列化忽略指定类型的属性详解

    如何利用Jackson序列化忽略指定类型的属性详解

    这篇文章主要给大家介绍了关于如何利用Jackson序列化忽略指定类型的属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Spring Cloud实现提供API给客户端的方法详解

    Spring Cloud实现提供API给客户端的方法详解

    这篇文章主要给大家介绍了关于Spring Cloud实现提供API给客户端的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 使用Java将字节数组转成16进制形式的代码实现

    使用Java将字节数组转成16进制形式的代码实现

    在很多场景下,需要进行分析字节数据,但是我们存起来的字节数据一般都是二进制的,这时候就需要我们将其转成16进制的方式方便分析,本文主要介绍如何使用Java将字节数组格式化成16进制的格式并输出,需要的朋友可以参考下
    2024-05-05
  • Java基础知识总结之继承

    Java基础知识总结之继承

    这一篇我们来学习面向对象的第二个特征——继承,文中有非常详细的基础知识总结,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • RocketMQ根据Tag进行消息过滤

    RocketMQ根据Tag进行消息过滤

    消费者订阅了某个主题后,Apache RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在 Apache RocketMQ 服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消息
    2023-02-02
  • Java生成随机时间的简单随机算法

    Java生成随机时间的简单随机算法

    今天小编就为大家分享一篇关于Java生成随机时间的简单随机算法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论