@Repository 与 @Mapper的区别

今天在用springboot整合mybatis时,mapper接口上用的注解是以前学spring时用的@Repository注解,可一运行,就出现了错误。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-11-19 20:29:20.989 ERROR 15260 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field videoMapper in com.shenlei.service.impl.VideoServiceImpl required a bean of type 'com.shenlei.mapper.VideoMapper' that could not be found.


在这里插入图片描述

说是找不到mapper这个bean,于是翻翻之前学springboot的笔记,发现要用mappe这个注解,加了之后,果然就可以了。
在这里插入图片描述

于是总结一下@Repository 与 @Mapper的区别

1、@Repository

@Repository 是 Spring 的注解,用于声明一个 Bean。@Repository单独使用没用。可以这样理解,注解放在接口上本来就没有意义,spring中在mapper接口上写一个@Repository注解,只是为了标识,要想真正是这个接口被扫描,必须使用@MapperScannerConfigurer

<!-- 配置 Mapper 扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.shenlei.mapper"/>
</bean>

这段配置会扫描com.shenlei.mapper包下所有的接口,然后创建各自的动态代理类。
与spring集成可分三个步骤:
1、把java类对应的Mapper接口类纳入spring总的IOC容器。
2、把Java类对应的XML命名空间添加到Mybatis中的Configuration类中的mapperRegistry(用于管理Mybatis的Mapper)
3、使用spring中的IOC容器拓展FactoryBean获取到Mapper的实例。(第一步纳入spring只是接口)

2、 @Mapper

@Mapper是mybatis自身带的注解。在spring程序中,mybatis需要找到对应的mapper,在编译时生成动态代理类,与数据库进行交互,这时需要用到@Mapper注解
在这里插入图片描述
但是有时候当我们有很多mapper接口时,就需要写很多@Mappe注解,这样很麻烦,有一种简便的配置化方法便是在启动类上使
用@MapperScan注解。

在这里插入图片描述
这样可以自动扫描包路径下所有的mapper接口,从而不用再在接口上添加任何注解。

3、区别

相同点:

@Mapper和@Repository都是作用在dao层接口,使得其生成代理对象bean,交给spring 容器管理
对于mybatis来说,都可以不用写mapper.xml文件

不同点:

1、@Mapper不需要配置扫描地址,可以单独使用,如果有多个mapper文件的话,可以在项目启动类中加入@MapperScan(“mapper文件所在包”)
2、@Repository不可以单独使用,否则会报错误,要想用,必须配置扫描地址(@MapperScannerConfigurer)

4、解决使用@mapper接口时,注入mapper爆红问题

在这里插入图片描述
在idea中单独使用@Mapper注解,在@Autowired时,idea会提示找不到bean,但是不影响运行,如果想消除爆红,可以将@Mapper注解跟@Repository注解一起用,这样便可消除爆红
在这里插入图片描述
这样便可消除爆红

  • 221
    点赞
  • 700
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
@repository和@Mapper是两种不同的注解,分别属于SpringMyBatis框架。 @Repository注解是Spring框架提供的注解之一,用于标注持久层(DAO)组件,表示该类是用来访问数据库的。它可以与@Mapper注解一起使用,也可以单独使用。如果只使用@Repository注解,需要配合使用MapperScannerConfigurer或者@MapperScan注解来扫描并识别该bean。单独使用@Repository注解时,在编辑器中可能会出现警告,但不影响程序运行,可以忽略或通过编辑器设置忽略该警告。 @Mapper注解是MyBatis框架提供的注解,用于标注持久层的接口。在程序中,MyBatis需要找到对应的mapper,通过动态生成代理类来实现数据库查询功能。和@Repository注解一样,@Mapper注解也可以单独使用,但在使用时会在IDE中出现警告,提示找不到对应的bean。然而,这个警告不会影响程序的运行,可以直接忽略。为了消除此警告,可以在IDE设置中忽略该警告,或者在使用@Mapper的地方同时使用@Repository注解,这样Spring会扫描并识别该bean,就不会出现警告。 一般情况下,我们更常使用@Mapper注解,而不使用@Repository注解。要使用@Mapper注解,可以通过以下三种方式来注入接口的实现类: 1. 在Spring的配置文件中配置MapperScannerConfigure,它会扫描持久层接口并创建实现类,交给Spring来管理。 2. 在持久层接口上使用@Mapper注解。 3. 在Spring Boot的启动类上使用@MapperScan注解,起到和MapperScannerConfigure相同的作用。 综上所述,@repository和@Mapper是分别属于SpringMyBatis框架的注解,用于标注持久层组件和持久层接口。它们可以同时使用,也可以单独使用,具体使用哪个注解取决于具体的框架和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [@Repository注解的作用和用法,以及和@Mapper区别](https://blog.csdn.net/fengling_smile/article/details/129853866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值