本文来说下@MapperScan扫描包的问题

文章目录

  • 概述
  • 本文小结

概述

必需引用 mybatis-spring-boot-starter, 否则不能扫描生效。可以用 mybatis-plus 的 mybatis-plus-boot-starter 替代。

从网上搜 MapperScan,大部分说是通过 basePackage 指定扫描多个包,本身没问题,但不是一个完美的方案。原因如下:

(1)如果扫描的包名是一个较顶级的,那么,一些不是 mapper 的 interface 也会被处理成 mapper 而被创建成一个 spring bean,造成系统无法启动,这肯定不行

(2)只有缩小包的范围,最好是只配置 mapper 对应包,但如果把所有包含 mapper 的包罗列出来,则也存在不足。

  • 其一,会导致列表变得比较长。用通配符解决一部分问题,但需要包包满足一些统一的规则。另外,对于层级不同的情况,不好处理。
  • 其二,则降低了扩展性,因为每增加或调整 mapper 包,都要到 @MapperScan 中去注册。业务代码的变更影响了框架性的代码。尤其是对于多模块的情况,这个问题变得越发隐晦:谁能想到多引用一个模块就需要配置一下 @MapperScan?
  • 其三,违背依赖的原则,本来框架不依赖业务,现在变成了框架反过来要因业务变化而调整代码。

如果不想在数据层的每个接口上面写@Mapper 注解,可以使用通配的形式来扫码Mapper


本文小结

本文分析了下@MapperScan扫描包的问题。

@MapperScan扫描包的问题相关推荐

  1. 实验16:使用context:include-filter指定扫描包时要包含的类 实验17:使用context:exclude-filter指定扫描包时不包含的类

    实验17:使用context:exclude-filter指定扫描包时不包含的类 扫描的时候可以排除一些不要的组件 type="annotation" 指定排除规则,按照注解进行排 ...

  2. 附录 SpringBoot 默认的扫描包是哪个?

    Spring Boot 的启动类上标注 @SpringBootApplication 注解 , 其默认扫描包就是启动类所在的包 . 为什么是这样? 我们看看 @SpringBootApplicatio ...

  3. Spring是如何扫描包的 Spring5.x(源码向)

    Spring是如何扫描包的 Spring5.x 锁定这个方法,Spring会在ClassPathScanningCandidateComponentProvider类的这个方法中进行扫描 privat ...

  4. springboot排除扫描包

    springboot排除扫描包 import com.reference.demo.annotation.MyEnableAnnotation; import org.springframework. ...

  5. SpringBoot扫描包问题

    不同包下的配置类使用mapSacn没有扫描到,百度之后在SpringbootApplication后加上scanbasepackages扫描包,可以扫描到,但是导致springboot只扫描了这一个类 ...

  6. mapperscan扫描不到包问题

    查看target包下mapper目录下没有xml文件 在maven里配置资源就可以解决了 <build><plugins><plugin><groupId&g ...

  7. MapperScan扫描多个包写法

    https://blog.csdn.net/u013059432/article/details/80239075

  8. java 扫描包框架_在Android中实现类似Spring的软件包扫描

    我正在尝试为component- scan我正在开发的Android框架实施类似于Spring的软件包扫描功能.基本上,我希望能够指定基本包,例如,com.foo.bar并检索Class具有特定批注的 ...

  9. java配置文件扫描包_SpringMVC和Spring的配置文件扫描包详解

    在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景 ...

最新文章

  1. 教你在Linux中如何归档和备份
  2. BGP边界网关协议线路优势
  3. 自媒体发展陷入僵局,社群媒体将成出路?呵呵…
  4. android获得一个view的高度,Android ViewTreeObserver使用总结及获得View高度的几种方法...
  5. python3.7下载tensorflow_【AI初体验】在anaconda中python3.7版本安装Tensorflow 与 Keras来玩玩...
  6. 算法题+JVM+自定义View,详细的Android学习指南
  7. 用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略
  8. ubutnu16.04下Intel Realsense D435驱动的安装和python环境的配置
  9. leetcode —— 752. 打开转盘锁
  10. 激光slam_激光SLAM与视觉SLAM,移动机器人核心技术不断升级
  11. 将数值位转换为字符位后输出
  12. eclipse上安装并配置tomcat
  13. 2021 最新版《神经网络和深度学习》中文版.pdf
  14. VMware网络设置详解 打造超级虚拟网络
  15. python毕业设计项目源码选题(10)电影院售票系统毕业设计毕设作品开题报告开题答辩PPT
  16. max7456 C语言,用于MAX7456随屏显示器SPI接口的C程序
  17. 有源rc电压放大器实验报告_我们一起来认识一下RC反馈回路
  18. ultraedit编译java_在UltraEdit中编译和运行Java程序
  19. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 待补
  20. 冲量在线荣获2021中关村国际前沿科技创新大赛TOP10

热门文章

  1. PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰
  2. 触发器-当表1插入数据时将表1的数据插入表2
  3. Android Canvas简单使用
  4. 对malloc和free的思考
  5. [转] Android应用如何反馈Crash报告
  6. SQL Servr 2008空间数据应用系列一:空间信息基础
  7. err-disabled
  8. 一个第三方Dart库导致的编译错误!
  9. 注解的原理又是怎么一回事
  10. JavaScript 与 PHP 的语法区别