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

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

  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @Mapper注解用于标记一个接口,它表示这个接口将作为MyBatis的映射文件来使用,它对应一个XML文件,其中定义了将被映射到该接口的SQL语句。@Repository注解是用来标识DAO层的组件,它将被用于自动生成DAO实现类,以及实现持久化操作。 ### 回答2: 在Spring Boot中,@Mapper和@Repository是两个常见的注解,用于在框架中进行数据访问和持久化操作。 @MapperMyBatis框架中的注解,用于标识一个接口是MyBatis的映射器。通过@Mapper注解,我们可以告诉Spring Boot将这个接口注册为一个可以执行SQL语句的Mapper接口。在使用@Mapper注解时,我们无需编写接口的具体实现,MyBatis会根据接口的定义自动生成对应的实现类。这样,我们就可以通过调用Mapper接口的方法来执行数据库的增删改查等操作。 @RepositorySpring框架中的注解,用于标识一个类是持久化层(Repository层)的组件。在Spring Boot中,我们通常使用@Repository注解将DAO(数据访问对象)标识为持久化组件。使用@Repository注解后,Spring Boot会自动扫描并将其纳入IoC容器中,使得我们可以在其他组件中直接使用@Autowired注解来注入并使用该持久化对象。 总结起来,@Mapper注解用于MyBatis的接口类,告诉Spring Boot将接口注册为Mapper并生成对应的实现类,使得我们可以使用Mapper接口执行数据库操作。而@Repository注解用于Spring的持久化层组件类,标识该类为数据访问对象,可以在其他组件中直接进行注入和使用。这两个注解Spring Boot中起到了不同的作用,但都是用于简化数据库访问和持久化操作的配置和编码工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值