温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springboot @Repository与@Mapper的区别是什么

发布时间:2022-03-11 16:30:46 来源:亿速云 阅读:914 作者:iii 栏目:开发技术

本篇内容介绍了“springboot @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.

    springboot @Repository与@Mapper的区别是什么

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

    springboot @Repository与@Mapper的区别是什么

    于是总结一下@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注解

    springboot @Repository与@Mapper的区别是什么

    但是有时候当我们有很多mapper接口时,就需要写很多@Mappe注解,这样很麻烦,有一种简便的配置化方法便是在启动类上使
    用@MapperScan注解。

    springboot @Repository与@Mapper的区别是什么

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

    3、区别

    相同点:

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

    不同点:

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

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

    springboot @Repository与@Mapper的区别是什么

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

    springboot @Repository与@Mapper的区别是什么

    这样便可消除爆红

    “springboot @Repository与@Mapper的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI