本文来说下@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扫描包的问题。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐