第三篇,我們來說說JPA規範中的QueryMethod相關類。首先給出類圖和繼承關係:
很簡單,是不是,只有區區兩個相關類,QueryMethod及其子類JpaQueryMethod。
QueryMethod類位於spring-data-commons-***.jar包中;而JpaQueryMethod則位於spring-data-jpa-***.jar包中。也就是說,QueryMethod是spring-data包中的通用類;而JpaQueryMethod是spring-data-jpa實現中的類,擴展了通用包中的QueryMethod。
QueryMethod:一個被指定用於運行finder查詢的方法的抽象。豐富了標準java.lang.reflect.Method接口以及與具體特定的,必須爲這個方法構造的RepositoryQuery信息。
JpaQueryMethod:QueryMethod的JPA具體/特定擴展類。
QueryMethod類持有RepositoryMetadata,Method,Parameters,domainClass等幾個私有類變量。其中RepositoryMetadata存儲的是repository接口的元數據,類圖如下:
Parameters是一個JpaParameters實例,存儲的是參數名和參數值的鍵值對集合,JpaParameters還包含一個內部類JpaParameter,它extends Parameter;
domainClass通常被賦值爲Repository接口泛型中定義的Class類,或者方法返回值的Class類;
打開源碼,我們驚訝的看到,JpaQueryMethod類也持有一個私有Method類變量,在這裏,我謹慎懷疑是開發人員在軟件設計時出現的一個小bug,既然父類持有了一個Method類變量,完全可以通過各種手段被子類繼承並使用嘛。
JpaQueryMethod類中包含了解析JPA 2.1規範中的支持存儲過程配置的若干類變量;以及QueryExtractor查詢提取器實現,通過這個設置,可以根據不同的實現,從jpa的Query中提取原始JPA查詢字符串,在這裏,spring-data-jpa的缺省Persistence Provider供應商實現是hibernate。
在spring-data-jpa中,JpaQueryMethod就是Repository接口中帶有@Query註解方法的全部信息,包括註解,類名,實參等的存儲類,所以Repository接口有多少個@Query註解方法,就會包含多少個JpaQueryMethod實例被加入監聽序列。實際運行時,一個RepositoryQuery實例持有一個JpaQueryMethod實例,JpaQueryMethod又持有一個Method實例。
未完待續。
spring-data-jpa原理探祕(3)-QueryMethod類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
男人們看過來!如何讓妳的女人更性福
SteveSapp9
2022-10-14 17:15:10
nbvnvb nvb nvnb vnvnbvnbv vnb
wbsbydw
2022-06-20 08:54:27
將台灣列“主要非北約盟邦”!美議員提案“最大幅修訂”對台政策
SteveSapp9
2022-06-18 17:02:15
dsdsdsd
xpvjhudosp
2022-06-18 06:49:40
WTGE QFWGEWHR
lemonkawsar80
2022-06-18 05:43:58
dsdsdsdsd
xpvjhudosp
2022-06-18 03:04:41
jfjdxfhfhfh
tenoxop591
2022-06-17 22:27:02
asfghjfyhghfr
jeffreycklima
2022-06-17 06:12:23
WRGE DBTRB RT45
edsa46457
2022-06-17 04:15:08
EDHTN DTNEHE TRH
edsa46457
2022-06-17 03:54:00
台中約炮#台中舒壓賴w8433 或賴076644 《telegram聊色群:nnw8433 》
xc7794
2022-06-15 15:01:10
Panimula sa online na pagsusugal na matematika
funbc168.anna
2022-06-13 11:55:47
ftghgyrdtterytffgh
inforaiyan14
2022-06-13 06:53:05
TRUMP want to work again for us.
edsa46457
2022-06-12 20:54:34