@Repository注解的作用和用法,以及和@Mapper的区别

这篇具有很好参考价值的文章主要介绍了@Repository注解的作用和用法,以及和@Mapper的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、@Repository的作用

@Repository是属于Spring的注解。它用来标注访问层的类(Dao层),它表示一个仓库,主要用于封装对于数据库的访问。其实现方式与@Component注解相同,只是为了明确类的作用而设立。
即@Repository是@Component注解的一个派生品,与@Service和@Controller都可以理解为@Component注解的扩展。他们的作用都是在类上实例化bean,并把当前类对象的实现类交给spring容器进行管理。

换句话说,@Repository注解修饰哪个类表明这个类具有对数据库CRUD的功能,用在持久层的接口上。

另外,作为spring的注解,他还能把所标注的类中抛出的数据访问异常封装为spring的数据访问异常类型
@Repository注解的作用和用法,以及和@Mapper的区别

2、@Repository与@Service和@Component有什么区别?

@Repository作用如上所说。
@Service注解用来标注服务层中的类,用于处理业务逻辑。在使用@Service注解标记的类中,通常会注入@Reposity的类。
@Component注解是通用的注解,用来标记所有被spring容器管理的组件。在使用@Component注解标记的类中,通常会注入@Service和@Repository标记的类。
本质上都是把实例化对象交给spring管理。

3、@Repository和@Mapper的异同

@Mapper是属于mybatis的注解。在程序中,mybatis需要找到对应的mapper,在编译时候动态生成代理类,实现数据库查询功能。
@Mapper和@Repository注解的使用方式一样,都是在持久层的接口上添加注解。
但是如果只是单独的使用@Mapper注解的话,在idea中进行自动装配的时候,会出现警告,提示找不到这个bean。但是这个不影响程序运行,可以直接忽略。
想要不出现这个警告,可以在idea设置中对这种警告进行忽略,也可以在使用@Mapper的地方同时使用
@Repository注解。这样spring会扫描@Repository并识别这个bean,就不会出现这个警告。

正常情况下的使用,我们都是使用@Mapper居多,而不使用@Repository注解。
不使用@Repository注解,而实现注入这个接口的实现类主要有以下3种方法:
1、在spring的配置文件中,配置了MapperScannerConfigure这个bean,他会扫描持久层接口创建实现类交给spring来管理。
2、接口使用@Mapper注解。
3、springboot的启动类上使用@MapperScan注解,和MapperScannerConfigure的作用一样。

4、正确的单独使用@Repository

@Repository注解是用于标记数据访问层的组件的注解,它会被spring扫描并注入到ioc容器中。即使没有使用@MapperScan注解或MapperScannerConfigurer,只要@Repository注解标记的组件与Mybatis的mapper接口实现相同,它也可以生效。

但是,在mybatis中使用@Repository注解可能会有一些问题。当使用@Repository注解时,spring会将其视为spring的组件,即为该类创建一个代理对象并在ioc容器进行管理。但是,mybatis中的mapper接口实现并不是spring的组件,他们是由mybatis创建的代理对象。使用@Repository注解可能会导致mybatis创建的代理对象被spring重新创建代理,进而出现问题。

因此,建议在mybatis中使用@MapperScan注解或者MapperScannerConfigurer来扫描mapper接口实现,并将他们注入到ioc容器中,而不是使用@Repository注解。

5、总结:

1、@Repository是spring的注解,@Mapper是mybatis的注解。
2、@Repository与@Mapper都可以使用,二者可以同时出现,也可以单一使用。
3、单独使用@Repository,需要配合使用MapperScannerConfigurer或者@MapperScan注解。
4、单独使用@Mapper时,可能会在编辑器出现警告,不影响程序运行。可以配合使用@Repository消除警告。(也可以在编辑器中设置忽略这种警告)文章来源地址https://www.toymoban.com/news/detail-451807.html

到了这里,关于@Repository注解的作用和用法,以及和@Mapper的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Util、POJO、domain、entity、model、DAO、DTO、view、mapper、service、controller的作用和区别分析

    @[TOC]Util、POJO、domain、entity、model、DAO、DTO、view、mapper、service、controller的作用和区别分析 前言 做开发项目时,总会遇到这些包,理清他们的层次,非常有助于我们对于项目的理解和建立。 现阶段CSDN上貌似没有很系统,很详细的关于层级类的解释。因此总结了一下自己的经

    2024年02月07日
    浏览(28)
  • @Service和@Component注解的区别和用法

    @Service和@Component注解在Spring框架中都用于标注类,以便Spring容器能够自动识别并创建其实例。然而,这两个注解在用法和区别上却有着不同的目的和效果。本文将详细介绍这两个注解的用法和区别,并通过示例代码进行演示。 一、@Service注解 @Service注解是Spring框架中用于标注

    2024年02月06日
    浏览(31)
  • Linux技巧(六):命令尾部&的作用 &&、|、||、;、()、&>、 2>&1 的用法和区别,很实用

    在使用Linux命令时,、||、;、()这些偶尔会接触到,命令结尾单独的“ ”符号,又有什么作用,这些命令之间有何区分,一起来学习一下吧。   【PS】: 如果你对Zookeeper学习:ZK下载安装和真/伪集群搭建感兴趣,点击进入。 作用: 表示任务在后台执行 ,即使ssh窗口关闭

    2024年02月01日
    浏览(26)
  • @Autowired和@Resource注解之间的关系区别,Bean的作用域和生命周期,Spring的执行流程

    目录 一. @Autowired 和 @Resource 注解 二. Bean的作用域  1. singleton(单例模式) 2. prototype(原型模式)(多例模式) 3. 请求作用域:request 4. 会话作用域:session 三. Spring 的执行流程 四. Bean 的生命周期   1. 实例化  2. 设置属性  3. Bean 初始化      3.1 执行各种各种 Aware 通知;     

    2024年02月04日
    浏览(48)
  • Linux | nslookup详细介绍一下这指令的作用以及用法

    linux 当中,nslookup是一个网络工具,通常用于查询域名系统(DNS)服务器以获取主机名或IP地址相关的信息。它可以用于查找主机名的IP地址,反向查找IP地址的主机名,以及查询DNS记录的其他信息。以下是nslookup命令的用法和示例: 查询主机名的IP地址: nslookup example.com 这个

    2024年04月26日
    浏览(33)
  • 【34JavaScript let 和 const】JavaScript中的“let“和“const“关键字详解:作用、用法及区别

    // 使用 let 声明变量 let x = 10; // 在同一作用域内重新赋值 x = 20; // 在不同的作用域内使用 let 声明变量 function example() { let y = 30; console.log(x); // 输出:20 console.log(y); // 输出:30 } console.log(x); // 输出:20 console.log(y); // 报错:y is not defined // 使用 const 声明常量 const PI = 3.14159; // 尝

    2024年02月08日
    浏览(31)
  • send()函数的用法;MSG_NOSIGNAL什么含义?有什么作用?以及flags中参数类型有哪些各自又起到什么作用?

    目录  1.send()函数的基本用法(入门级): 2.MSG_NOSIGNAL什么含义?有什么作用? 3.send()函数中第4个flags中参数类型有哪些各自又起到什么作用? send() 函数是一个用于在 TCP/IP 网络上发送数据的系统调用函数。它通常在客户端和服务器端程序中被使用。 send() 函数的语法如下: 其

    2024年02月07日
    浏览(31)
  • Unity中向量的点乘、叉乘区别和作用以及经典案例

    unity开发中我们要计算角度,判断位置,常用点乘、叉乘、归一化等等,我们看看他们的使用案例 点乘(Dot Product) 在Unity中的Vector3类提供了 Dot() 方法来计算两个向量的点乘。点乘的结果是一个标量值,可以用于判断两个向量的方向关系或者计算投影长度等。 叉乘(Cross P

    2024年04月28日
    浏览(29)
  • 路由器的内存种类和作用以及NVRAM同RAM的区别介绍

    路由器内存的种类 路由器的内存有三类:RAM(Random Access Memory),NVRAM(Non-Volatile Random Access Memory)及EEPROM(Electronic Erasable Programmable Random Access Memory,又称为Flash)。 路由器内存的作用 Flash:存储路由器的操作系统(IOS:Internet Operating system)。 NVRAM:存储用户对路由器的配置表。 RAM:路

    2024年02月06日
    浏览(30)
  • Rollup & 的作用、使用教程、支持 Vue、以及与 Webpack / Babel 的区别

    没接触过前端模块化概念的同学可先参考:JS Node 模块化解释:AMD、UMD、CommonJS、 ESM Rollup 工具可以将代码转成不同模块,实现一套代码多端(浏览器/Node)引入。比如通过一句命令将代码打包为: 浏览器(代码通过 Script 标签引入) AMD(兼容 requirejs.js 框架) CommonJS(Node.j

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包