@MapperScan的作用,以及与@Mapper的区别

@MapperScan的作用

  1. @MapperScan 的作用:

    • 这个注解告诉 MyBatis-Spring-Boot-Starter 自动扫描指定包(及其子包)下的所有接口。
    • 对于扫描到的每个接口,MyBatis 会自动创建一个 MapperFactoryBean。
    • 这个 MapperFactoryBean 会被注册到 Spring 容器中。
  2. 自动 IoC 管理:

    • 通过上述过程,所有在指定包下的 Mapper 接口都会自动被 Spring 容器管理。
    • 这意味着你可以直接在其他 Spring 管理的类中注入这些 Mapper,而不需要额外的注解。
  3. 不需要 @Component

    • Mapper 接口是特殊的 Spring bean,它们由 MyBatis 通过动态代理实现。
    • @Component 通常用于标记普通的 Spring 组件,而 Mapper 接口已经通过 @MapperScan 被特殊处理了。

@MapperScan(“”)和@Mapper的对比

使用 @MapperScan("") 和在每个 Mapper 接口上添加 @Mapper 注解都可以实现将 Mapper 接口注册到 Spring 容器中的目的。让我们来比较这两种方法:

  1. 使用 @MapperScan("com.hkd.mapper")

优点:

  • 集中配置,只需要在配置类上添加一次注解。
  • 减少了在每个 Mapper 接口上添加注解的重复工作。
  • 如果有新的 Mapper 接口添加到指定包中,不需要额外的配置。

缺点:

  • 可能会扫描到不需要的接口,如果包内有非 Mapper 的接口。
  1. 在每个 Mapper 接口上使用 @Mapper 注解:

优点:

  • 更加明确,每个 Mapper 接口都清楚地标识了它的用途。
  • 可以更精确地控制哪些接口被视为 Mapper。
  • 不依赖于包结构,Mapper 可以分布在不同的包中。

缺点:

  • 需要在每个 Mapper 接口上都添加注解,有些重复工作。
  • 如果忘记在新增的 Mapper 上添加注解,可能会导致该 Mapper 无法被识别。

选择建议:

  1. 对于小型项目或 Mapper 较少的情况,使用 @Mapper 注解可能更直观。

  2. 对于大型项目或 Mapper 较多的情况,使用 @MapperScan 可以减少重复工作,更易于管理。

  3. 有些开发者会同时使用两种方法:在配置类上使用 @MapperScan,同时在 Mapper 接口上使用 @Mapper。这样做可以兼顾两种方法的优点,虽然有些冗余,但可以增加代码的可读性和明确性。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值