Spring中@Repository注解的作用和用法以及和@Mapper的区别详析

 更新时间:2023年09月25日 15:42:47   作者:fenglin_smile  
这篇文章主要给大家介绍了关于Spring中@Repository注解的作用和用法以及和@Mapper的区别的相关资料,注解的作用是标识一个类为数据访问对象,并由Spring框架进行实例化和管理,需要的朋友可以参考下

1、@Repository的作用

@Repository是属于Spring的注解。它用来标注访问层的类(Dao层),它表示一个仓库,主要用于封装对于数据库的访问。其实现方式与@Component注解相同,只是为了明确类的作用而设立。

即@Repository是@Component注解的一个派生品,与@Service和@Controller都可以理解为@Component注解的扩展。他们的作用都是在类上实例化bean,并把当前类对象的实现类交给spring容器进行管理。

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

另外,作为spring的注解,他还能把所标注的类中抛出的数据访问异常封装为spring的数据访问异常类型

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消除警告。(也可以在编辑器中设置忽略这种警告)

到此这篇关于Spring中@Repository注解的作用和用法以及和@Mapper的区别的文章就介绍到这了,更多相关Spring @Repository注解用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot上传图片文件步骤详解

    springboot上传图片文件步骤详解

    这篇文章主要介绍了springboot上传图片文件步骤详解,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java之策略模式比较器案例讲解

    Java之策略模式比较器案例讲解

    这篇文章主要介绍了Java之策略模式比较器案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • JAVA简单选择排序算法原理及实现

    JAVA简单选择排序算法原理及实现

    选择排序(Selection Sort )分为两种 简单选择排序(Simple Selection Sort) 和树形选择排序
    2014-01-01
  • Java开发常见错误之数值计算精度和舍入问题详析

    Java开发常见错误之数值计算精度和舍入问题详析

    除了使用Double保存浮点数可能带来精度问题外,更匪夷所思的是这种精度问题,下面这篇文章主要给大家介绍了关于Java开发常见错误之数值计算精度和舍入问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验

    关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验

    这篇文章主要介绍了关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验,@ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置,需要的朋友可以参考下
    2023-05-05
  • 详解Spring Boot Junit单元测试

    详解Spring Boot Junit单元测试

    本篇文章主要介绍了详解Spring Boot Junit单元测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java持久层框架Mybatis入门详细教程

    Java持久层框架Mybatis入门详细教程

    Mybatis持久层框架支持自定义SQL、存储过程以及高级映射,可以通过XML或注解来配置和映射原始类型、接口和Java POJOs为数据库中的记录,接下来通过本文给大家介绍Java持久层框架Mybatis入门详细教程,一起学习下吧
    2021-06-06
  • java如何获取两个List集合之间的交集、差集、并集

    java如何获取两个List集合之间的交集、差集、并集

    在日常开发中经常会遇到对2个集合的操作,例如2个集合之间取相同的元素(交集),2个集合之间取不相同的元素(差集)等等,这篇文章主要给大家介绍了关于java如何获取两个List集合之间的交集、差集、并集的相关资料,需要的朋友可以参考下
    2024-02-02
  • SpringCloud Feign高级配置详解

    SpringCloud Feign高级配置详解

    这篇文章主要介绍了SpringCloud Feign高级配置,feign是netflix提供的服务间基于http的rpc调用框架,在spring cloud得到广泛应用
    2022-09-09
  • Java双重MD5加密实现安全登录

    Java双重MD5加密实现安全登录

    MD5对密码进行加密存储是常见的一种加密方式,本文主要介绍了Java双重MD5加密实现安全登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论