当前位置: 首页 > news >正文

Spring / Spring Boot 的@MapperScan 和 @Repository

@MapperScan@Repository 是两个与数据访问层相关的注解,它们在功能上有一定的联系,但也有明显的区别。

一、相同点

1. 都与数据访问层相关

  • @MapperScan:用于扫描 MyBatis 的 Mapper 接口。MyBatis 是一个流行的持久层框架,Mapper 接口定义了数据库操作的方法,@MapperScan 的作用是将这些接口扫描并注册为 Spring 的 Bean,从而可以在 Spring 应用中方便地使用这些 Mapper。

  • @Repository:用于标注数据访问层的类,通常用于 DAO(Data Access Object)类。它是一个 Spring 的注解,用于标记一个类是数据访问层的组件。在 Spring 的上下文中,被 @Repository 标注的类会被注册为一个 Bean,并且可以享受 Spring 提供的异常处理等功能。

2. 都与 Spring 的 Bean 管理有关

  • 无论是 @MapperScan 还是 @Repository,它们最终的目的都是将相关的类或接口注册为 Spring 的 Bean。这样,这些 Bean 就可以在 Spring 的上下文中被管理,并且可以通过依赖注入的方式被其他组件使用。

二、区别

1. 作用对象不同

  • @MapperScan

    • 作用对象:作用于包或类上,用于扫描 MyBatis 的 Mapper 接口。

    • 使用场景:当你使用 MyBatis 作为持久层框架时,需要通过 @MapperScan 来指定 MyBatis 的 Mapper 接口所在的包路径,Spring 会自动扫描这些接口,并为每个接口创建一个代理对象,这个代理对象就是 Spring 的 Bean。

    • 示例

      @MapperScan("com.example.mapper")
      @SpringBootApplication
      public class Application {
          public static void main(String[] args) {
              SpringApplication.run(Application.class, args);
          }
      }

      在这个例子中,Spring 会扫描 com.example.mapper 包下的所有接口,并为每个接口创建一个代理对象。

  • @Repository

    • 作用对象:作用于类上,用于标注数据访问层的类(通常是 DAO 类)。

    • 使用场景:当你使用传统的 Spring 数据访问方式(如 JDBC Template 或 JPA)时,可以使用 @Repository 来标注你的 DAO 类。这样,Spring 会将这个类注册为一个 Bean,并且可以享受 Spring 提供的异常处理等功能。

    • 示例

      @Repository
      public class UserDao {
          public User getUserById(int id) {
              // 实现数据访问逻辑
          }
      }

2. 功能侧重点不同

  • @MapperScan

    • 功能侧重点:主要功能是扫描 MyBatis 的 Mapper 接口,并为每个接口创建代理对象。这个代理对象会根据 MyBatis 的配置(如 XML 映射文件或注解)来实现具体的数据库操作。

    • 依赖框架:依赖于 MyBatis 框架。如果没有使用 MyBatis,@MapperScan 就没有意义。

  • @Repository

    • 功能侧重点:主要功能是标注一个类是数据访问层的组件,并将这个类注册为 Spring 的 Bean。它不依赖于具体的持久层框架,可以用于各种数据访问技术(如 JDBC Template、JPA、MyBatis 等)。

    • 依赖框架:依赖于 Spring 框架。它是一个 Spring 提供的注解,用于统一管理数据访问层的组件。

3. 使用方式不同

  • @MapperScan

    • 使用方式:通常放在 Spring Boot 的主类或配置类上,指定 MyBatis 的 Mapper 接口所在的包路径。

    • 示例

      @MapperScan("com.example.mapper")
      @SpringBootApplication
      public class Application {
          public static void main(String[] args) {
              SpringApplication.run(Application.class, args);
          }
      }
  • @Repository

    • 使用方式:直接标注在数据访问层的类上。

    • 示例

      @Repository
      public class UserDao {
          public User getUserById(int id) {
              // 实现数据访问逻辑
          }
      }

4. 异常处理

  • @MapperScan

    • 异常处理@MapperScan 本身不直接提供异常处理功能。MyBatis 的异常处理主要依赖于 MyBatis 自身的异常处理机制。

  • @Repository

    • 异常处理@Repository 提供了异常处理的功能。当在数据访问层抛出异常时,Spring 会将这些异常转换为 Spring 的数据访问异常(如 DataAccessException),从而使得异常处理更加统一和方便。

5. 与事务管理的配合

  • @MapperScan

    • 事务管理@MapperScan 扫描的 Mapper 接口通常会与事务管理器配合使用。事务管理器可以通过 Spring 的 @Transactional 注解来管理事务,而 @MapperScan 扫描的 Mapper 接口会参与到事务管理中。

  • @Repository

    • 事务管理@Repository 标注的类也可以与事务管理器配合使用。事务管理器可以通过 Spring 的 @Transactional 注解来管理事务,而 @Repository 标注的类会参与到事务管理中。

ok,以上就是本次分享的内容~

http://www.dtcms.com/a/108110.html

相关文章:

  • Java 可变参数全解析:动态参数传递的实践指南
  • 【MySQL基础-20】MySQL条件函数全面解析:提升查询逻辑的利器
  • 区块链技术如何重塑金融衍生品市场?
  • 防火墙(RHCE)
  • 大数据:信息时代的黄金矿藏
  • Leetcode 合集 -- 排列问题 | 递归
  • k8s statefulset pod重启顺序
  • Qt 读写锁QReadWriteLock
  • 前端计算机网络常问问题大全
  • 如何在服务器端配置SSH以允许密码认证
  • html5炫酷图片悬停效果实现详解
  • 【零基础入门unity游戏开发——2D篇】使用SpriteAtlas(精灵图集)打包图集,减少DrawCall提高性能
  • 第四章、Isaacsim在GUI中构建机器人(1): 添加简单对象
  • SQL复杂查询与性能优化:医药行业ERP系统实战指南
  • Linux 基础入门操作 第九章 进程间通信之有名管道
  • el-select+el-tree、el-select+vl-tree实现下拉树形选择
  • Linux中进程与计划任务
  • SpringMvc获取请求数据
  • HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板
  • 配置 UOS/deepin 系统远程桌面,实现多台电脑协同办公
  • PHP 8.x:现代Web开发的性能与效率革命
  • 解码 __getitem__ 和 __len__ - 自定义序列的钥匙
  • Prompt攻击是什么
  • Go和Golang语言简介
  • 快速排序与归并排序
  • 【硬件视界10】网络硬件入门:音频设备详解:声卡与音响系统
  • 【区块链 + 可信存证】国链区块链可信存证系统| FISCO BCOS 应用案例
  • 使用Qemu模拟32位ARM系统
  • OpenCV图像形态学:原理、操作与应用详解
  • 前端实现单点登录(SSO)的方案