SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found.

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

IDEA版本2018.2

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

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第1张图片
所以有强迫症的可以网上查找,如何取消该红色的错误提示,这里就不提供方案了。

这是我的DAO的注解,注意我使用的是@Mapper,后面会讲解@Repository

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第2张图片
这是我的启动类的扫面

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第3张图片
第二种方式,使用@Repository,去除刚才的红色错误提示

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第4张图片
SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第5张图片使用@Repository后,发现红色错误提示没有了,所以本人现在比较推荐@Repository。

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

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

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

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

        
           
                src/main/java
               
                    **/*.xml
               

           

       


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

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第6张图片
其他相关问题:
1.org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.springboot.dao.StudentMapper.insertStudent 无效绑定语句(未找到)
出现这个原因,需要检查下namespace的对应的dao的全限定名是否正确,我这里故意写少了一个 " r ",就报了这个错误。

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第7张图片
假如,我的mybatis映射文件的扫描路径写错了,比如我这里缺少了个 “ r ”。也会报这个 “无效绑定语句(未找到)”。

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第8张图片

2.假设我创建了一个相同的StudentMapper.xml,只是命名不同,但里面的内容完全是一样的,那又会报什么错误呢?

SpringBoot整合MyBatis,service中导入mapper报错——Could not autowire.No beans of 'xxxMapper' type found._第9张图片
错误信息如下(这里截取关键的详细信息):

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的配置了,以致于一直在做无用功。

在这里插入图片描述

--------------------- 
原文:https://blog.csdn.net/qq_39039017/article/details/84143109 

你可能感兴趣的:(项目)