1. 程式人生 > >spring-data-jpa原理探祕(3)-QueryMethod類

spring-data-jpa原理探祕(3)-QueryMethod類

第三篇,我們來說說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

第三篇,我們來說說JPA規範中的QueryMethod相關類。首先給出類圖和繼承關係: 很簡單,是不是,只有區區兩個相關類,QueryMethod及其子類JpaQueryMethod。 QueryMethod類位於spring-data-commons-***.jar包中;

spring-data-jpa原理探祕4-JpaQueryExecution概述

spring-data-jpa原理的第四篇,來說說JpaQueryExecution相關類。首先給出類圖和繼承關係: spring-data-jpa中對JpaQueryExecution有明確說明: 包含多個查詢執行策略的類的集合。根據大多數org.springframew

spring-data-jpa原理探祕1-執行環境建立及載入Repository介面

spring-data-jpa的優點很多,比如繼承Repository介面,在註解中書寫JPQL語句即可訪問資料庫;支援方法名解析方式訪問資料庫;使用Predicate支援動態查詢等,在此不一一列舉了。這些都是使用spring-data-jpa中的種種優點,要想將之使用的更

spring-data-jpa原理探祕2-RepositoryQuery的用途和分類

本系列的第二篇文章,主要講解在spring-data-jpa中佔有重要地位的RepositoryQuery介面的用途和分類。 首先我們看看RepositoryQuery介面極其子類的類圖 上圖很清晰的說明,RepositoryQuery介面包含SimpleJpaQuery,

spring-data-jpa快速入門——

快速 span ron blank support bubuko body lan -s 一、概述   官網:https://projects.spring.io/spring-data-jpa/   1.什麽是spring-data-jpa   Spring D

spring-data-jpa快速入門——簡單查詢

ref spa data mail domain event cif open 寫實 一、方法名解析   1.引言     回顧HelloWorld項目中的dao接口 public interface GirlRepository extends JpaRepos

spring-data-jpa簡單使用

1:使用spring-data-jpa很簡單,只需要在dao層繼承repository介面即可。那麼repository介面是什麼呢?  可以看到repository介面下面什麼都沒有,這表明它是一個標記介面。標記介面的作用的什麼?標記介面的作用是把當前類納入到spring的容器

spring-data-jpa簡單使用

1:可以使用原生態的sql語句查詢資料庫 @Query(value = "select meetings.* FROM tenant\n" + "LEFT JOIN meeting_domain_binding ON tenant.id = meeting_dom

Spring Data Jpa系列教程--------入門

大渣好,我是小小書生,現在開始,我們來學習船新的一門技術,SpringDataJpa,它是一個。。額。。(我百度一下) JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它為Java開發人員提供了一種物件/關聯對映工具來管理Java

Spring Data JPA動態查詢多條件and

ica cat 滿足 from pos true ans let tid entity: @Entity @Table(name = "data_illustration") public class Test { @Id @Gen

spring data jpa關聯查詢一對一、一對多、多對多

sse eager save net array ota println ack generate   在實際過往的項目中,常用的查詢操作有:1、單表查詢,2、一對一查詢(主表和詳情表)3、一對多查詢(一張主表,多張子表)4、多對多查詢(如權限控制,用戶、角色多對多)。做個

一、Spring-Data-Jpa 初體驗基於SpringBoot

閒話少說,首先動起來(基於springboot+gradle): 1、引入依賴 dependencies { compile 'org.springframework.boot:spring-boot-starter-data-jpa:2.1.1.RELEASE' testCompile

Spring原理解析3- Bean

Bean的生命週期 Bean的生命過程可以借鑑Servlet的生命過程,瞭解其生命過程對於不管是思想還是以後的使用都很有幫助; Bean可以通過兩種方式進行載入,分別是使用BeanFactory 和 applicationContext, 下邊就這兩種方式進行Bean的宣告週期總結: a

Spring Data 開發環境搭建

是不是 lns utf-8 void ext for 實體類 connect domain 首先咱們先創建一個maven工程 在pom.xml加入以下 依賴 <!--Mysql 驅動包--> <dependency> <

Spring Data Redis整體介紹

目前 擴展 刪除 依據 實例化 -m doc 不同的 SDR 為什麽使用Spring Data Redis 首先Spring Data Redis 是Spring 框架提供的用於操作Redis的客戶端。 Spring框架是一個全棧Java程序框架,通過DI、AOP和便攜的服

Spring Cloud Eureka原理分析:註冊過程-服務端

Eureka的官方文件和Spring Cloud Eureka文件都有很多含糊的地方,其他資料也不多,只有讀讀原始碼維持生活這樣子…… 本文將不會詳細介紹每個細節,而是講述一些關鍵的地方,便於查閱。 一些好的參考資料 對讓人一臉懵逼的region和zone的解釋 攜程對Eureka機制的剖析

Spring Cloud Eureka原理分析:續租、下線、自我保護機制和自動清理服務端

續租、下線等操作比較直觀,實際上也不復雜。讓我們自己想想它們大概會在服務端有什麼操作。 renew: 更新Lease的lastUpdateTimestamp, 更新一下InstanceInfo的最新狀態。然後呼叫其他同伴節點的renew介面。 cancel:把lease從registry中移除,設

Spring AOP實現原理筆記 -- 原始碼分析

1、註冊AnnotationAwareAspectJAutoProxyCreator 首先要了解Spring解析XML配置檔案時,遇到自定義節點是如何解析的。可以參考Spring自定義XML標籤解析及其原理分析 當Spring遇到這個標籤的時候,它會

Spring+SpringMVC+MyBatis入門實踐3

註解方式IOC/DI 修改spring-config.xml ... <context:annotation-config/> <bean name="c" class="com.happycoder.pojo.Categ

使用Spring Data Redis操作Redis 很全面

Spring-Data-Redis專案(簡稱SDR)對Redis的Key-Value資料儲存操作提供了更高層次的抽象,類似於Spring Framework對JDBC支援一樣。 本文主要介紹Spring Data Redis的實際使用。 1.Spring Data