首先有资料显示这两个注解效果是一样的,只不过@Mapper需要在dao层每一个类上面添加!
在启动类上面加注解@MapperScan,没有问题;
但是在dao层方法上面添加@Mapper注解,不加@MapperScan,会报错
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.xx.dao.SystemUserDaoI' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
在配置文件mybatis配置如下:
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.mapper-locations=classpath*:mapper/*/*.mapper.xml
mybatis.type-aliases-package=com.xx.**
求大佬解答
<p>首先@Mapper及@MapperScan注解是Spring boot Mybatis的注解,并非属于SpringBoot。</p>
然后单独使用@Mapper而不使用@MapperScan是没问题的,如果你的项目出现没有自动声明bean的情况,我看你的截图是分api和service,是否调用的springboot app(api工程)和mapper类声明的接口(service工程)不在同一个工程(jar)内,所以你的Springboot工程在启动时没有扫描到@Mapper类?这是因为mybatis-spring-boot-autoconfigure只在当前运行的springboot app内扫描注解的class,并不会扫描其他依赖的jar包内的class注解。
如果确定是这样的情况,解决办法是:要不你就直接在springboot app使用@MapperScan注解,扫描指定package。要不你就在service工程的启动主类上边添加@SpringBootApplication注解
如果对你有用,请采纳
回复 <a class="referer" target="_blank">@Kit_lee</a> : 了解了,可能真的是这个原因!!回头再研究下,没有深入研究!谢谢回答:smile:
回复 <a class="referer" target="_blank">@JssDream</a> : 这样理解,你在子工程B写了一个Service类,用@Service注解了,但在A工程依赖B工程的时候,A工程在启动时,spring并不会自动扫描其他依赖包下边有没有@Service并自动创建Bean实例。Spring只会扫描当前工程下的<a class="referer" target="_blank">@Controller</a> <a class="referer" target="_blank">@Service</a> @Componet @Mapper等。所以遇上这程依赖其他子工程的类,需要你用指定扫描的包
感谢回复!项目结构如下,是多个模块的,service工程没有启动类,只有admin有个启动类,依赖的话也没有问题!!是在不行就只能使用@MapperScan,就是不太理解:flushed:
@MapperScan必须,@Mapper非必须,可以为接口,也可以是某个包下
回复 <a class="referer" target="_blank">@Kit_lee</a> : 对,是可以的,但是那种的好像是单应用,单模块可以,多模块调用好像单独使用@Mapper注解启动一直报注入失败,很尴尬
@MapperScan并不是必须的,官网上也说了,可以单独使用@Mapper注解每一个Mapper类,也可以使用@MapperScan扫描指定类包。两种方式都可以。
<h2>SpringBoot整合MyBatis</h2>
https://springboot.io/t/topic/806
感谢回复!项目是多个模块的,pom也添加了相应依赖,使用@MapperScan是没有问题的。可以正常启动,就是在单独使用@Mapper注解会启动报错
<p><img height="783" src="https://oscimg.oschina.net/oscnet/edb56269c54117b1958609e582097accd1c.jpg" width="376">这是项目的结构图,依赖都加了</p>
回复 <a class="referer" target="_blank">@Kit_lee</a> : 感谢回复!!:clap:
那就是我说的,mybatis-spring-boot-autoconfigure只会扫描当前admin工程内的class注解,不会自动扫描所有依赖包的(范围太大,影响启动性能)。依赖包内的任何注解bean都不会自动创建Bean实例,需要你在admin工程内扫描并创建bean
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。