最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot不掃描@repository的問(wèn)題及解決

 更新時(shí)間:2024年05月29日 14:40:14   作者:Smaksze  
這篇文章主要介紹了springboot不掃描@repository的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot不掃描@repository問(wèn)題

問(wèn)題

單獨(dú)使用@repository注解注dao層,而且不使用@mapperscan掃描時(shí),啟動(dòng)項(xiàng)目會(huì)報(bào)錯(cuò):

Field xxxxMapper in com.sms.shiro.service.impl.xxxxServiceImpl required a bean of type ‘com.sms.shiro.mapper.xxxxMapper’ that could not be found.

一.@mapper和@repository的區(qū)別

1.@mapper是mybatis的注解,@repository是spring家族的注解。

2.使用@mapper注解時(shí),spring并不認(rèn)識(shí),@autowired注入到service里的mapper會(huì)爆紅。

二.回到問(wèn)題中來(lái)

明明springboot里的ComponentScan掃描了啟動(dòng)器包下的所有含注解的組件,那為什么卻找不到@repository的組件?

原因:

造成這個(gè)問(wèn)題的原因是因?yàn)閟pringboot在掃描時(shí)候自動(dòng)過(guò)濾掉了接口和抽象類,所以@repository修飾的mapper接口并不能稱為一個(gè)bean,自然也就無(wú)法注入到service中。

三.解決方式

第一種: 不使用@repository,在mapper層接口直接使用@mapper,但如果項(xiàng)目工程較大的話就會(huì)很麻煩。

第二種: 如果想使用@repository,因?yàn)閟pringboot無(wú)法掃描到mapper接口,則在啟動(dòng)器上使用@mapperscan掃描所有mapper接口的包,如:@MapperScan("com.sms.shiro.*.mapper")

第三種: 其實(shí)使用@mapperscan注解掃描mapper接口后,mapper接口就不需要@repository和@mapper去注冊(cè)bean了,但如果想項(xiàng)目結(jié)構(gòu)比較明了,在使用了@mapperscan掃描后,@repository和@mapper都可使用,都不會(huì)報(bào)錯(cuò)了,但是使用@repository會(huì)解決在service中@autowired mapper爆紅的問(wèn)題。

SpringBoot關(guān)于@Mapper和@Repository的一些疑問(wèn)

@Mapper 是 Mybatis 的注解,和 Spring 沒(méi)有關(guān)系,@Repository 是 Spring 的注解,用于聲明一個(gè) Bean。

@Mapper

Mybatis 需要找到對(duì)應(yīng)的 mapper,在編譯的時(shí)候動(dòng)態(tài)生成代理類,才能實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的一系列操作,所以我們需要在接口上添加 @Mapper 注解。

例如(這里只是為了演示并且sql不復(fù)雜,所以這里使用注解的方式來(lái)編寫sql語(yǔ)句):

@Mapper
public interface UserMapper {

    @Select("select * from user where id = #{id}")
    User getById(Integer id);

    @Select("select * from user")
    List<User> getAll();
}

編寫測(cè)試方法,可以發(fā)現(xiàn)加了自動(dòng)裝配注解的userMapper會(huì)出現(xiàn)報(bào)錯(cuò)(并不影響代碼正常運(yùn)行),這是因?yàn)锧Mapper是Mybatis中的注解,我們沒(méi)有顯示的標(biāo)明UserMapper是spring中的一個(gè)Bean,idea此時(shí)會(huì)認(rèn)為在運(yùn)行時(shí)找不到實(shí)例注入,所以會(huì)提示錯(cuò)誤

在這里插入圖片描述

雖然這個(gè)報(bào)錯(cuò)并不影響代碼的正常運(yùn)行,但是看著很不舒服,我們可以@Repository注解(也可以使用@Componet,只要注明這是一個(gè)bean就可以)來(lái)顯示的說(shuō)明UserMapper是一個(gè)bean

@Repository

@Repository 是spring提供的一個(gè)注解,用于聲明 dao 層的 bean,如果我們要真正地使用 @Repository 來(lái)進(jìn)行開(kāi)發(fā),那么我們需要手動(dòng)實(shí)現(xiàn)UserMapperImpl,也就是說(shuō)手寫 JDBC代碼!!!

@Repository
public class UserMapperImpl implements UserMapper{
	
	@Override
	public User getById(Integer id){
		// 裝載Mysql驅(qū)動(dòng)
		// 獲取連接
		// 創(chuàng)建Statement
		// 構(gòu)建SQL語(yǔ)句
		// 執(zhí)行SQL返回結(jié)果
	}
}

@MapperScan(“com.xxx.xxx”)

如果我們不使用@Mapper注解,還有另一種方式讓Mybatis找到mapper接口,那就是 @MapperScan 注解,可以在啟動(dòng)類上添加該注解,自動(dòng)掃描包路徑下的所有mapper接口。

@SpringBootApplication
@MapperScan("com.example.springboot_mybatis.mapper")
public class SpringbootMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }
}

使用@MapperScan注解之后,就不需要在mapper接口上添加任何注解了??!

心得:

總的來(lái)說(shuō),@Mapper 和 @MapperScan 這兩個(gè)必須有一個(gè),否則就會(huì)出錯(cuò)!

@Repository 可有可無(wú),對(duì)程序正常運(yùn)行沒(méi)什么影響,但是可以消除idea報(bào)錯(cuò)的問(wèn)題

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyEclipse如何取消默認(rèn)工作空間方法示例

    MyEclipse如何取消默認(rèn)工作空間方法示例

    這篇文章主要介紹了MyEclipse如何取消默認(rèn)工作空間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java中4種API參數(shù)傳遞方式統(tǒng)一說(shuō)明

    java中4種API參數(shù)傳遞方式統(tǒng)一說(shuō)明

    在Java中,我們可以使用不同的方式來(lái)傳遞參數(shù)給方法或函數(shù),這篇文章主要介紹了java中4種API參數(shù)傳遞方式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12
  • 詳解spring security四種實(shí)現(xiàn)方式

    詳解spring security四種實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解spring security四種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java時(shí)間處理詳細(xì)教程與最佳實(shí)踐案例

    Java時(shí)間處理詳細(xì)教程與最佳實(shí)踐案例

    本文系統(tǒng)講解Java時(shí)間處理,涵蓋基礎(chǔ)概念、傳統(tǒng)API(Date/Calendar/SimpleDateFormat)、Java8新API(java.time包)及高級(jí)應(yīng)用,提供代碼案例與最佳實(shí)踐,適合開(kāi)發(fā)者全面掌握時(shí)間操作技巧,感興趣的朋友一起看看吧
    2025-08-08
  • java使用ffmpeg實(shí)現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)

    java使用ffmpeg實(shí)現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)

    這篇文章主要介紹了java使用ffmpeg實(shí)現(xiàn)上傳視頻的轉(zhuǎn)碼,提取視頻的截圖等功能,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java實(shí)現(xiàn)小球碰撞功能

    java實(shí)現(xiàn)小球碰撞功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)小球碰撞功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • JAVA實(shí)現(xiàn)KMP算法理論和示例代碼

    JAVA實(shí)現(xiàn)KMP算法理論和示例代碼

    本文從理論到代碼講解了JAVA對(duì)KMP算法的實(shí)現(xiàn),大家可以參考一下
    2013-11-11
  • SpringCloud Config配置中心原理以及環(huán)境切換方式

    SpringCloud Config配置中心原理以及環(huán)境切換方式

    這篇文章主要介紹了SpringCloud Config配置中心原理以及環(huán)境切換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 關(guān)于@RequestLine的使用及配置

    關(guān)于@RequestLine的使用及配置

    這篇文章主要介紹了關(guān)于@RequestLine的使用及配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot使用Shiro實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限詳解流程

    SpringBoot使用Shiro實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限詳解流程

    本文小編將基于?SpringBoot?集成?Shiro?實(shí)現(xiàn)動(dòng)態(tài)uri權(quán)限,由前端vue在頁(yè)面配置uri,Java后端動(dòng)態(tài)刷新權(quán)限,不用重啟項(xiàng)目,以及在頁(yè)面分配給用戶?角色?、?按鈕?、uri?權(quán)限后,后端動(dòng)態(tài)分配權(quán)限,用戶無(wú)需在頁(yè)面重新登錄才能獲取最新權(quán)限,一切權(quán)限動(dòng)態(tài)加載,靈活配置
    2022-07-07

最新評(píng)論

平湖市| 金门县| 公主岭市| 仁布县| 浦城县| 瑞安市| 习水县| 衡东县| 鱼台县| 曲靖市| 耿马| 扎鲁特旗| 曲阳县| 望都县| 灵武市| 临泽县| 沅陵县| 龙山县| 循化| 城市| 塘沽区| 天门市| 衡阳县| 衡水市| 历史| 旬邑县| 宁明县| 长垣县| 竹北市| 临洮县| 罗田县| 大庆市| 固始县| 介休市| 无为县| 广元市| 响水县| 扶风县| 平山县| 盐边县| 禹城市|