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

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,以上就是本次分享的内容~

相关文章:

Spring / Spring Boot 的@MapperScan 和 @Repository

MapperScan 和 Repository 是两个与数据访问层相关的注解,它们在功能上有一定的联系,但也有明显的区别。 一、相同点 1. 都与数据访问层相关 MapperScan:用于扫描 MyBatis 的 Mapper 接口。MyBatis 是一个流行的持久层框架,Mapp…...

SDL中SDL_AudioSpec结构体参数

文章目录 ✅ SDL_AudioSpec 结构体定义📌 每个字段详细解释 设置依据1. freq:采样频率(Sample Rate)2. format:采样格式(Sample Format)3. channels:通道数(Channels&am…...

每日一题(小白)模拟娱乐篇14

直接理解题意,一分钟扩散一次,那么2020分钟也就是需要循环2020次,然后加入扩散后的条件,每一个次扩散使方格子的总量1(只要有一个点扩散就无需看其他的点),若干次循环过后总数之和即所有黑色格子…...

使用 Python 爬取并打印双色球近期 5 场开奖数据

使用 Python 爬取并打印双色球近期 5 场开奖数据 前期准备安装所需库 完整代码代码解析 1. 导入必要的库2. 定义函数 get_recent_five_ssq 3. 设置请求的 URL 和 Headers 4. 发送请求并处理响应5. 解析 HTML 内容6. 提取并打印数据7. 错误处理 首先看下运行的效果图&#xff1a…...

再见VS Code!Google IDE 正颠覆传统开发体验

云端开发的革命:Google Project IDX 如何颠覆传统开发体验 在软件开发领域,Google 最新推出的 Project IDX 绝非仅仅是另一个“基于浏览器的 VS Code”——它是一次真正的范式转变。与 VS Code、Cursor 等传统工具不同,IDX 是一个完全云原生的…...

Java Web从入门到精通:全面探索与实战(一)

目录 引言:开启 Java Web 之旅​ 一、Java Web 基础概念大揭秘​ 1.1 什么是 Java Web​ 1.2 Java Web 的优势剖析​ 1.3 Java Web 相关核心概念详解 二、搭建 Java Web 开发环境:步步为营 2.1 所需软件大盘点​ 2.2 软件安装与配置全流程​ 三…...

AI+自动化测试:如何让测试编写效率提升10倍?

文章目录 摘要传统自动化测试的痛点编写测试用例太费时间测试覆盖率难以保证UI 测试维护成本高 AI 如何优化自动化测试?AI 生成单元测试:减少重复工作,提高覆盖率传统方法 VS AI 方法 使用 AI 生成 Python 单元测试自动补全边界情况传统方法 …...

软件工程面试题(三十)

将ISO8859-1字符串转成GB2312编码,语句为? String snew String(text.getBytes(“iso8859-1”),”gb2312”). 说出你用过的J2EE标准的WEB框架和他们之间的比较? 答:用过的J2EE标准主要有:JSP&Servlet、JDBC、JNDI…...

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…...

Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法

用C#开发的一款WINFORM程序,在电脑测试一切顺利,运行结果正确。但用电脑的定时任务执行时,程序界面不显示,重启电脑、各种试都不行,最终问题解决。 解决办法: 要选“只在用户登陆时运行”,才能执…...

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言 上一篇我们已经完成对IIC代码基本框架的编写,以及获取MPU6050的ID,接下来我们逐一分析这个模块的功能,并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器(PWR_MGMT_1,地址:0…...

基于Go语言实现一个网络聊天室(连接Redis版)

基于Go语言和Redis的实时聊天室项目详解 项目概述 在这个项目中,我们实现了一个基于Go语言和Redis的实时聊天室系统。该系统允许用户通过客户端连接到服务器,进行实时聊天,并且支持以下功能: 用户网名注册和验证消息广播和接收…...

深入解析 RocketMQ 中的 BrokerOuterAPI 组件​

在 RocketMQ 这一高性能分布式消息队列系统中,BrokerOuterAPI 组件犹如一座桥梁,连接着 Broker 与外部世界,在系统的运行、管理以及与其他组件交互过程中发挥着极为关键的作用。本文将深入探讨 BrokerOuterAPI 组件的内部机制、核心功能以及其…...

make_01_Program_06_:: 是什么功能

在 Makefile 中,:: 是一种特殊的分隔符,用于创建多重规则(multiple rules)。当您使用 :: 定义目标时,您可以为同一个目标指定多个命令或多个依赖关系。每个命令将在构建目标时按顺序执行,不会影响其他命令的…...

springboot2.7.x整合nacos+seata

1、nacos及seata下载地址 Nacos Server 下载 | Nacos 官网 Seata Java Download | Apache Seata 这里的seata版本用2.1.0版本。 2、启动nacos D:\本地-seata-nacos\nacos-server\bin>startup.cmd -m standalone 3、修改seata的conf下的application的内容 这里的数据库…...

为 IDEA 设置管理员权限

IDEA 安装目录 兼容性选择管理员身份运行程序 之后 IDEA 中的操作(包括终端中的操作)都是管理员权限的了...

Apache Doris 2.1.9 版本正式发布

亲爱的社区小伙伴们,Apache Doris 2.1.9 版本已正式发布。2.1.9 版本对湖仓一体、倒排索引、半结构化数据类型、查询优化器、执行引擎、存储管理进行了若干改进优化。欢迎大家下载使用。 官网下载:https://doris.apache.org/download GitHub 下载&…...

单片机学习笔记8.定时器

IAP15W4K58S4定时/计数器结构工作原理 定时器工作方式控制寄存器TMOD 不能进行位寻址,只能对整个寄存器进行赋值 寄存器地址D7D6D5D4D3D2D1D0复位值TMOD89HGATEC/(T低电平有效)M1M0GATEC/(T低电平有效)M1M000000000B D0-D3为T0控制,D4-D7为T1控制 GAT…...

vue3实现markdown预览和编辑

Markdown作为一种轻量级标记语言,已经成为开发者编写文档的首选工具之一。在Vue3项目中集成Markdown编辑和预览功能可以极大地提升内容管理体验。本文将介绍如何使用Vditor这一强大的开源Markdown编辑器在Vue3项目中实现这一功能。 一、Vditor简介 Vditor是一款浏…...

高并发秒杀系统接入层如何设计

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...

C++异常处理 throw try catch

C 异常处理概述 C 异常处理机制提供了一种在程序运行时捕获错误或异常情况的方式。异常处理的目的是使得程序在遇到错误时能够优雅地终止或恢复,并防止程序出现崩溃。C 使用 try, throw, 和 catch 关键字来实现异常处理。 异常处理的基本结构: throw: …...

纯css实现环形进度条

需要在中实现一个定制化的环形进度条&#xff0c;最终效果如图&#xff1a; 使用代码 <divclass"circular-progress":style"{--progress: nextProgress,--color: endSliderColor,--size: isFull ? 60rpx : 90rpx,}"><div class"inner-conte…...

0基础 | 硬件 | 电源系统 一

降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源&#xff0c;通过控制开关管的导通程度实现稳压&#xff0c;输出纹波小&#xff0c;无开关噪声 线性电源&#xff0c;IoutIin&#xff0c;发热功率P电压差△U*电流I&#xff0c;转换效率Vo/Vi LDO不适…...

详解 MySQL 索引的最左前缀匹配原则

MySQL 的最左前缀匹配原则主要是针对复合索引&#xff08;也称为联合索引&#xff09;而言的。其核心思想是&#xff1a;只有查询条件中包含索引最左侧&#xff08;第一列&#xff09;开始的连续一段列&#xff0c;才能让 MySQL 有效地利用该索引。 一、 复合索引的结构 复合…...

蓝桥杯算法题1

前言 双指针 唯一的雪花 Unique Snowflakes #include<iostream> #include<unordered_map> using namespace std; //这道题的意思就是在一个数组找一个最大的1区间的长度&#xff0c;这个区间里面没有重复数据 //如果暴力解法&#xff0c;每次求出以a[i]开头的满…...

【愚公系列】《高效使用DeepSeek》053-工艺参数调优

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

Cortex-M系列MCU的位带操作

Cortex-M系列位带操作详解 位带&#xff08;Bit-Banding&#xff09;是Cortex-M3/M4等处理器提供的一种硬件特性&#xff0c;允许通过别名地址对内存或外设寄存器中的单个位进行原子读-改-写操作&#xff0c;无需禁用中断或使用互斥锁。以下是位带操作的完整指南&#xff1a; …...

大坑!GaussDB数据库批量插入数据变只读

大坑!GaussDB数据库批量插入数据变只读 GaussDB插入数据时变只读df和du为什么不一致GaussDB磁盘空间使用阈值GaussDB变只读怎么办正确删除表的姿势GaussDB插入数据时变只读 涉及的数据库版本为:GaussDB Kernel 505.1.0 build da28c417。 GuassDB TPCC灌数报错DML失败,数据…...

35信号和槽_信号槽小结

Qt 信号槽 1.信号槽是啥~~ 尤其是和 Linux 中的信号进行了对比&#xff08;三要素&#xff09; 1) 信号源 2) 信号的类型 3)信号的处理方式 2.信号槽 使用 connect 3.如何查阅文档. 一个控件&#xff0c;内置了哪些信号&#xff0c;信号都是何时触发 一…...

获取KUKA机器人诊断文件KRCdiag的方法

有时候在进行售后问题时需要获取KUKA机器人的诊断文件KRCdiag&#xff0c;通过以下方法可以获取KUKA机器人的诊断文件KRCdiag&#xff1a; 1、将U盘插到控制柜内的任意一个USB接口&#xff1b; 2、依次点【主菜单】—【文件】—【存档】—【USB&#xff08;控制柜&#xff09…...