溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

springboot?@Repository與@Mapper的區(qū)別是什么

發(fā)布時間:2022-03-11 16:30:46 來源:億速云 閱讀:936 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“springboot @Repository與@Mapper的區(qū)別是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    今天在用springboot整合mybatis時,mapper接口上用的注解是以前學(xué)spring時用的@Repository注解,可一運行,就出現(xiàn)了錯誤。

    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的區(qū)別是什么

    說是找不到mapper這個bean,于是翻翻之前學(xué)springboot的筆記,發(fā)現(xiàn)要用mappe這個注解,加了之后,果然就可以了。

    springboot?@Repository與@Mapper的區(qū)別是什么

    于是總結(jié)一下@Repository 與 @Mapper的區(qū)別

    1、@Repository

    @Repository 是 Spring 的注解,用于聲明一個 Bean。@Repository單獨使用沒用。可以這樣理解,注解放在接口上本來就沒有意義,spring中在mapper接口上寫一個@Repository注解,只是為了標(biāo)識,要想真正是這個接口被掃描,必須使用@MapperScannerConfigurer

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

    這段配置會掃描com.shenlei.mapper包下所有的接口,然后創(chuàng)建各自的動態(tài)代理類。
    與spring集成可分三個步驟:
    1、把java類對應(yīng)的Mapper接口類納入spring總的IOC容器。
    2、把Java類對應(yīng)的XML命名空間添加到Mybatis中的Configuration類中的mapperRegistry(用于管理Mybatis的Mapper)
    3、使用spring中的IOC容器拓展FactoryBean獲取到Mapper的實例。(第一步納入spring只是接口)

    2、 @Mapper

    @Mapper是mybatis自身帶的注解。在spring程序中,mybatis需要找到對應(yīng)的mapper,在編譯時生成動態(tài)代理類,與數(shù)據(jù)庫進行交互,這時需要用到@Mapper注解

    springboot?@Repository與@Mapper的區(qū)別是什么

    但是有時候當(dāng)我們有很多mapper接口時,就需要寫很多@Mappe注解,這樣很麻煩,有一種簡便的配置化方法便是在啟動類上使
    用@MapperScan注解。

    springboot?@Repository與@Mapper的區(qū)別是什么

    這樣可以自動掃描包路徑下所有的mapper接口,從而不用再在接口上添加任何注解。

    3、區(qū)別

    相同點:

    @Mapper和@Repository都是作用在dao層接口,使得其生成代理對象bean,交給spring 容器管理
    對于mybatis來說,都可以不用寫mapper.xml文件

    不同點:

    1、@Mapper不需要配置掃描地址,可以單獨使用,如果有多個mapper文件的話,可以在項目啟動類中加入@MapperScan(“mapper文件所在包”)
    2、@Repository不可以單獨使用,否則會報錯誤,要想用,必須配置掃描地址(@MapperScannerConfigurer)

    4、解決使用@mapper接口時,注入mapper爆紅問題

    springboot?@Repository與@Mapper的區(qū)別是什么

    在idea中單獨使用@Mapper注解,在@Autowired時,idea會提示找不到bean,但是不影響運行,如果想消除爆紅,可以將@Mapper注解跟@Repository注解一起用,這樣便可消除爆紅

    springboot?@Repository與@Mapper的區(qū)別是什么

    這樣便可消除爆紅

    “springboot @Repository與@Mapper的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI