SpringBoot使用Mybatis时@Mapper与@MapperScan注解的区别
下文笔者讲述SpringBoot中`@Mapper`和`@MapperScan`注解的功能简介说明,如下所示
`@Mapper`和`@MapperScan`注解简介
1.`@Mapper`注解
功能
- `@Mapper`是MyBatis提供注解
用于标识一个接口是一个MyBatis的Mapper接口
- Spring Boot会自动扫描
并注册带有`@Mapper`注解接口为Spring容器中Bean
特点
- 逐个声明:
需要在每个Mapper接口上显式添加`@Mapper`注解
- 适合小型项目:
当项目中Mapper接口较少时
这种方式简单直观。
- 无需额外配置:
Spring Boot会自动识别并注册这些接口
例
@Mapper
public interface UserMapper {
User findById(int id);
}
2.`@MapperScan`注解
功能
- `@MapperScan`是MyBatis提供的注解
用于批量扫描指定包下的所有Mapper接口
并将它们注册为 Spring 容器中Bean。
- 它可以替代逐个为每个Mapper 接口添加`@Mapper`注解方式
特点
- 批量扫描:
通过指定包路径
自动扫描该包及其子包下的所有 Mapper 接口。
- 适合大型项目:
当项目中Mapper接口较多时
这种方式更加高效。
- 集中管理:
只需要在一个地方(通常是主类或配置类)声明扫描路径
便于维护
例
@SpringBootApplication
@MapperScan("com.java265.mapper") // 扫描 com.java265.mapper 包下的所有 Mapper 接口
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
`@Mapper`和`@MapperScan`注解区别
| 特性 | `@Mapper` | `@MapperScan` | |------------------------|---------------------------------------------|-------------------------------------------| | 作用范围 | 单个 Mapper 接口 | 批量扫描多个 Mapper 接口 | | 使用方式 | 在每个 Mapper 接口上显式添加注解 | 在主类或配置类中声明扫描路径 | | 适用场景 | 小型项目,Mapper 接口数量较少 | 大型项目,Mapper 接口数量较多 | | 是否需要逐个声明 | 需要 | 不需要 | | 维护成本 | 较高(每个接口都需要添加注解) | 较低(集中管理扫描路径) |
`@Mapper`和`@MapperScan`注解相关总结
- `@Mapper`:
适合小型项目
逐个声明 Mapper 接口,简单直观
- `@MapperScan`:适合大型项目
集中管理 Mapper 接口的扫描路径
减少重复声明的工作量
在实际开发中
笔者可根据项目的规模和需求选择合适的注解:
当项目中有少量 Mapper 接口,
笔者建议直接使用 `@Mapper`。
当项目中有大量 Mapper 接口,
笔者推荐使用 `@MapperScan` 来简化配置和维护。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


