SpringBoot整合MyBatis——Could not autowire.No beans of 'xxxMapper' type found.(期待网友共同编辑)

遇到这个问题困扰了我好几天,其实之前刚开始学习SpringBoot与MyBatis整合的时候,也遇到过这个问题。现在是第二次犯这个错误了,然而却不是明知故犯,是慢慢被自己坑进来的。让我们来看一下这个问题吧。可能总结的不是很全面,欢迎各位给我指出来,让解决该类问题的这篇博客变得更加详细起来,帮助更多的学习者解决该类问题,这就是写该博客的初衷

IDEA版本2018.2

首先,是IDEA本身的问题,我这个程序是可以正常运行起来的,而这个studentMapper的Bean是存在的,并且可以自动注入
在这里插入图片描述

所以有强迫症的可以网上查找,如何取消该红色的错误提示,这里就不提供方案了。

这是我的DAO的注解,注意我使用的是@Mapper,后面会讲解@Repository
在这里插入图片描述

这是我的启动类的扫面
在这里插入图片描述

第二种方式,使用@Repository,去除刚才的红色错误提示
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
使用@Repository后,发现红色错误提示没有了,所以本人现在比较推荐@Repository。

就因为这个错误使自己陷入了很多没必要的坑,但问题都是围绕这个bug的,因为一直纠结这个错误嘛,因为我们知道开发工具是不会有错误的,有错误的是程序员自己嘛!!!

紧接着就回到了我第一次遇到的问题,无法装配mapper的bean。而这个我之前是解决了的,只是用了书中作者的源码,而忽视了那个配置。

这个跟新版的idea有关,本人使用的版本是2018.2。由于新版的idea默认是不编译java下的xml文件的,由于程序员都习惯将mapper与xml放在同一个目录下而导致了无法编译xml,致使无法注入相关的Bean。而eclipse却可以这样做,所以使用idea开发的同志们就需要注意了。

在pom.xml中,添加如下配置

		<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>

在这里插入图片描述

然后检查一下,target目录下是否有xml的编译文件,有的话则说明编译成功。

在这里插入图片描述
其他相关问题:
1.org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.springboot.dao.StudentMapper.insertStudent 无效绑定语句(未找到)
出现这个原因,需要检查下namespace的对应的dao的全限定名是否正确,我这里故意写少了一个 " r ",就报了这个错误。
在这里插入图片描述

假如,我的mybatis映射文件的扫描路径写错了,比如我这里缺少了个 “ r ”。也会报这个 “无效绑定语句(未找到)”。
在这里插入图片描述
2.假设我创建了一个相同的StudentMapper.xml,只是命名不同,但里面的内容完全是一样的,那又会报什么错误呢?
在这里插入图片描述

错误信息如下(这里截取关键的详细信息):

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘studentMapper’ defined in file…
Error creating bean with name ‘sqlSessionFactory’ defined in class path resource…
Failed to parse mapping resource. …
Error parsing Mapper XML…
Mapped Statements collection already contains value for com.test.springboot.dao.StudentMapper.getStudent…

这么一大堆错误,说白了,就是不知道映射到哪个映射文件,所以要确保映射文件的唯一性,否则找半天都不知道啥问题。

3.Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘studentMapper’ defined
Caused by: java.lang.IllegalArgumentException: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

另外,如果出现了这两个异常的话,建议检查下你的启动类上是否加了这句,如果加了,建议把它 删除 掉,否则会一直报上面的异常。我之前加这个的原因是因为找不到数据源的url。网上找到了这个解决的方案,结果加了这句后,错误是没了,但是报上面的异常的,让我不得不怀疑mapper的配置了,以致于一直在做无用功。
在这里插入图片描述

好了,基本总结如上所述,如果我的总结有错误的话,欢迎指出。假如上述的方案没有让您的问题解决的话,欢迎在下方给我留言,并且 提出您的类似问题或方案 ,让解决这类问题的本博客更加详尽,以帮助那些遇到该问题的朋友尽快解决问题

以下来自其他博友的方案:
1.感谢勾蟹博友
勾蟹:我的idea版本是2018.3,多模块SSM整合时也遇到这个问题,不过我的解决方案是Fire>project structure>Facets右一栏+号为当前项目或Modules添加Spring特征,然后在右二栏+号添加Application Context,为这个Context设置名称便于管理(可选),再看下面会出现当前项目或者Modules下的所有探测到的spring XML文件,为这个Context勾选应在同一上下文的XML,OK即可。 原理大概是告诉idea当前项目或Modules的spring context,当@Autowired注入mapper时,idea就会去这个上下文中查找,找不到就飘红线。

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值