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.mzph.cn/news/900283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎

全星 APQP 软件:驱动汽车及制造业研发升级的数字化引擎 在汽车及制造业竞争白热化的当下,如何高效推进研发项目,同时确保严格合规,成为企业亟待解决的难题。 全星研发项目管理 APQP 软件系统,凭借卓越的功能与显著优势…

cadence17.4和16.6同时安装无法使用的问题

最近在搞这个两个版本的软件安装,针对网上的一些说法: 方法一:先装17.4再装16.6,文件放在一个文件夹,打不开,两个版本都无法使用 方法二:分别安装,文件路径放在不同的文件 方案三:修改环境变量,直接使用17.4的 License Manager 这个也无法解决问题。 经过对报错的问…

(三)链式工作流构建——打造智能对话的强大引擎

上一篇:(二)输入输出处理——打造智能对话的灵魂 在前两个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理的细节。今天,我们将进入智能对话的高级阶段——链式工作流构建。这一阶段的目…

【MATLAB定位例程】TDOA(到达时间差)的chan-tylor,三维环境,附完整代码

该代码实现了基于三维空间的动态目标TDOA定位,结合了Chan算法(解析解)与Taylor级数展开法(迭代优化)的双重优势。 文章目录 运行结果MATLAB代码代码讲解代码功能概述核心算法原理代码结构解析可视化与结果分析运行结果 定位示意图: 三轴状态曲线: 三轴误差曲线: MA…

Golang的文件同步与备份

Golang的文件同步与备份 一、Golang介绍 也称为Go语言,是谷歌开发的一种编程语言,具有高效的并发编程能力和出色的内存管理。由于其快速的编译速度和强大的标准库,Golang在网络应用、云平台和大数据等领域得到了广泛应用。 二、文件同步与备份…

ARXML文件解析-2

目录 1 摘要2 常见ARXML文件注意事项以及常见问题2.1 注意事项2.2 常见问题2.3 答疑 3 ARXML解读/编辑指南3.1 解读ARXML文件的步骤3.2 编辑ARXML文件的方法3.3 验证与调试 4 总结 1 摘要 本文主要对ARXML文件的注意事项、常见问题以及解读与编辑进行详细介绍。 上文回顾&…

3535 数组分割

3535 数组分割 ⭐️难度:困难 🌟考点:2023、省赛、动态规划 📖 📚 import java.util.*;public class Main {static int MOD 1000000007;static int N 1005;public static void main(String[] args) {Scanner sc …

Git操作指南

Git操作指南 1.安装并配置Git Git官网:https://git-scm.com/downloads 安装完成后,打开Git Bash,配置Git: git config --global user.email "emailexample.com" git config --global user.name "Your Name&quo…

Linux常用基础命令应用

目录 一、文件与目录操作(12个核心命令)​​ ​​1. pwd - 显示当前路径​​ ​​2. ls - 查看目录内容​​ ​​3. cd - 切换目录​​ ​​4. mkdir - 创建目录​​ ​​5. touch - 创建文件​​ ​​6. cp - 复制文件/目录​​ ​​7. mv - 移动…

zookeeper基本概念和核心作用

图片来源: 02-Zookeeper概念_哔哩哔哩_bilibili02-Zookeeper概念是黑马程序员Zookeeper视频教程,快速入门zookeeper技术的第2集视频,该合集共计24集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilib…

关于HikariDataSource (null)的误解,顺带提出一种mybaits-Plus mapper映射失败的容易被忽视的原因

首先探究此问题并无什么实际意义,纯属是个人好奇使然,也顺带熟悉了一下Springboot 数据库连接的相关问题,本人纯小白说的不对的地方恳请大佬指正!! 关于HikariDataSource (null)的误解 问题的发现 Value("${myba…

Centos7上安装docker - yum在线的方式

步骤一 : 安装 yum-utils yum install -y yum-utils步骤二 : 替换docker 的国内的源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo执行完成后,会在 /etc/yum.repos.d/ 目录下 新增 doc…

250405-VSCode编辑launch.json实现Debug调试Open-WebUI

A. 最终效果 根据__init__.py配置launch.json 根据中utils/chat.py中form_data的messages [{role: user, content: 唐老鸭}],可以找到用户输入,进而通过关键词或模型调用的方式,对敏感问题进行特殊处理。 B. 文件配置 launch.json // { // /…

①(PROFINET 转 Modbus TCP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

型号 协议转换通信网关 PROFINET 转 Modbus TCP MS-GW35 概述 MS-GW35 是 PROFINET 和 Modbus TCP 协议转换网关,为用户提供一种 PLC扩展的集成解决方案,可以轻松容易将 Modbus TCP 网络接入 PROFINET 网络中,方便扩展,不受限制…

分治-归并排序-逆序对问题

目录 1.升序(以右边的合并组为基准) 2.降序(以左边的合并组为基准) 3.逆对序--固定下标 1.升序(以右边的合并组为基准) 找出左边有多少个数比我(nums[right])大 应该在每一次合并之前,进行…

(四)数据检索与增强生成——让对话系统更智能、更高效

上一篇:(三)链式工作流构建——打造智能对话的强大引擎 在前三个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理和链式工作流构建的细节。今天,我们将进入智能对话系统的高级阶段——数…

JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)

这里写目录标题 JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)一、引言二、全面认识Java2.1 Java的起源与发展历程2.2 Java的特性2.2.1 简单性2.2.2 面向对象2.2.3 平台无关性2.2.4 健壮性2.2.5 安全性2.2.6 多线程…

如何查看 MySQL 的磁盘空间使用情况:从表级到数据库级的分析

在日常数据库管理中,了解每张表和每个数据库占用了多少磁盘空间是非常关键的。这不仅有助于我们监控数据增长,还能为性能优化提供依据。 Google Gemini中国版调用Google Gemini API,中国大陆优化,完全免费!https://ge…

[Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集

[Windows] XHS-Downloader 链接:https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款开源免费的小红书内容下载工具,支持无水印视频 / 图文提取、多链接批量处理及账号作品采集。其核心优势包括: 全平台…

6.1 宽度优先搜索算法(BFS)

宽度优先搜索算法(BFS Breadth first search) 又称广度优先搜索,这种搜索是逐层的,搜索完上层,才会搜索下一层,直到找到目标节点。 搜索过程如图中箭头方向: 【例如】 八数码难题:利用空格的移动&#xff…