Mybatis-Plus @MapperScan用与不用区别

使用@MapperScan

在MybatisPlusAutoConfiguration类中,除了会注入SqlSessionFactory和SqlSessionTemplate外,还会检查容器是否注入了MapperScanner扫描器。
在这里插入图片描述
@ConditionalOnMissingBean({MapperFactoryBean.class, MapperScannerConfigurer.class})
首先去检查出否有MapperFactoryBean和MapperScannerConfigurer两个类的bean,通过idea的查找,发现MapperFactoryBean没有手动注入,再看看MapperScannerConfigurer,其中一部分如图:
在这里插入图片描述
大概的意思就是,通过此mapper扫描器从容器中扫描到的候选bean定义,就将它们注册成MapperFactoryBean类的bean。具体源码如下:
在这里插入图片描述
在这里插入图片描述
注意doScan(),ClassPathMapperScanner重写了:
在这里插入图片描述
processBeanDefinitions():
在这里插入图片描述
将扫描到的bean定义的类型修改成MapperFactoryBean,源码结束。
那问题来了,MapperScannerConfigurer能创建MapperFactoryBean,那MapperScannerConfigurer还需要自己来配置吗?
在这里插入图片描述
使用@MapperScan注解,我们可以就可以直接注入MapperScannerConfigurer啦。

在这里插入图片描述
在这里插入图片描述
函数末尾就注册了MapperScannerConfigurer的bean定义。
到此我们发现,我们只使用了@MapperScan就可以直接扫描到我们需要的Mapper类,并不需要@Mapper,当然@MapperScan需要指定扫描的包路径,其他包是扫描不到的。

不使用@MapperScan

回到此图:在这里插入图片描述
如果没有使用@MapperScan,就是导入一个AutoConfiguredMapperScannerRegistrar
在这里插入图片描述
注释的大概意思:这个类扫描的路径和当前springboot扫描的路径一样。如果需要扫描其他项目的路径,可以使用@MapperScan。
我们从源码可以看到,packages从beanFactory中获取,annotationClass设置成Mapper,说明扫描路径和springboot的一样,只扫描@Mapper注解。

总结

1.多项目下,可以使用@MapperScan包扫描多包路径
2.不使用@MapperScan,就必须使用@Mapper并且类路径在Springboot路径下能找到,才可以正常使用。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值