天天看點

Spring Data JPA:解析CriteriaQuery

CriteriaQuery 

CriteriaQuery定義在包路徑javax.persistence.criteria下,其定義如下:

CriteriaQuery對應的類圖如下:

Spring Data JPA:解析CriteriaQuery

此處聚焦CriteriaQuery繼承體系中定義了哪些方法,請參見下圖:

Spring Data JPA:解析CriteriaQuery

解讀:

根據上述方法的傳回值可知,AbstractQuery、CriteriaQuery接口中的方法大部分是傳回其本身類型變量,可以了解為流式API的寫法。

回顧一下Specification中toPredicate方法的定義,代碼如下:

上述方法的第二個參數為CriteriaQuery類型,是以在建構Specification的執行個體(實作其toPredicate方法)時可以借助CriteriaQuery的能力,案例如下:

上述案例調用了CriteriaQuery的where以及orderBy方法以指定具體查詢條件,在return語句中調用了CriteriaQuery的getRestriction方法。

Note:

從前面類圖可知,getRestriction方法實際上是定義在CommonAbstractCriteria接口中,代碼如下:

CriteriaQuery與EntityManager

EntityManager定義在包路徑javax.persistence下,其中的一些方法如下圖所示:

Spring Data JPA:解析CriteriaQuery

EntityManager提供了衆多createQuery方法,其中一個createQuery方法可以接受CriteriaQuery類型的參數,該方法的定義如下:

上述代碼通過EntityManager的getCriteriaBuilder方法擷取了CriteriaBuilder類型的變量,進而建構了CriteriaQuery類型的變量,然後進一步利用CriteriaQuery中的from、where等方法指定查詢條件。

擴充閱讀

官方文檔[位址]

其它[位址]