spring data jpa 為了方便我們排序和分頁,支援了兩個特殊型別的引數:sort 和 pageable。
sort 在查詢的時候可以實現動態排序,我們看下其原始碼:
public
sort
(direction direction, string.
.. properties)
sort 裡面決定了我們哪些欄位的排序方向(asc 正序、desc 倒序)。
pageable 在查詢的時候可以實現分頁效果和動態排序雙重效果,我們看下 pageable 的 structure,
我們發現 pageable 是乙個介面,裡面有常見的分頁方法排序、當前頁、下一行、當前指標、一共多少頁、頁碼、pagesize 等。
使用樣例:
page
findbylastname
(string lastname, pageable pageable)
;//根據分頁引數查詢user,返回乙個帶分頁結果的page(下一課時詳解)物件(方法一)
方法一:允許將 org.springframework.data.domain.pageable 例項傳遞給查詢方法,將分頁引數新增到靜態定義的查詢中,通過 page 返回的結果得知可用的元素和頁面的總數。這種分頁查詢方法可能是昂貴的(會預設執行一條 count 的 sql 語句),所以用的時候要考慮一下使用場景。
slice
findbylastname
(string lastname, pageable pageable)
;//我們根據分頁引數返回乙個slice的user結果(方法二)
方法二:返回結果是 slice,因為只知道是否有下乙個 slice 可用,而不知道 count,所以當查詢較大的結果集時,只知道資料是足夠的,也就是說用在業務場景中時不用關心一共有多少頁。
list
findbylastname
(string lastname, sort sort)
;//根據排序結果返回乙個list(方法三)
方法三:如果只需要排序,需在 org.springframework.data.domain.sort 引數中新增乙個引數,正如上面看到的,只需返回乙個 list 也是有可能的。
list
findbylastname
(string lastname, pageable pageable)
;//根據分頁引數返回乙個list物件(方法四)
pagerequest是pageable 的乙個實現類,裡面提供的幾個 of 靜態方法(多型),分別構建頁碼、頁面大小、排序等。
有的時候我們想直接查詢前幾條資料,也不需要動態排序,那麼就可以簡單地在方法名字中使用 first 和 top 關鍵字,來限制返回條數。
user findfirstbyorderbylastnameasc()
;user findtopbyorderbyagedesc()
;list
finddistinctusertop3bylastname
(string lastname, pageable pageable)
;list
findfirst10bylastname
(string lastname, sort sort)
;list
findtop10bylastname
(string lastname, pageable pageable)
;
其中:
(1)查詢方法在使用 first 或 top 時,數值可以追加到 first 或 top 後面,指定返回最大結果的大小;從 spring data 2.0 開始,jpa 新增了@nonnull @nonnullapi @nullable,是對 null 的引數和返回結果做的支援。(2)如果數字被省略,則假設結果大小為 1;
(3)限制表示式也支援 distinct 關鍵字;
(4)支援將結果包裝到 optional 中(後續學習)。
(5)如果將 pageable 作為引數,以 top 和 first 後面的數字為準,即分頁將在限制結果中應用。
@nonnullapi:在包級別用於宣告引數,以及返回值的預設行為是不接受或產生空值的。@nonnull:用於不能為空的引數或返回值(在 @nonnullapi 適用的引數和返回值上不需要)。
@nullable:用於可以為空的引數或返回值。
Spring Data JPA實踐與學習(九)
實體與實體之間的關聯關係一共分為四種,分別為onetoone onetomany manytoone 和 manytomany 而實體之間的關聯關係又分為雙向的和單向的。實體之間的關聯關係是在 jpa 使用中最容易發生問題的地方。entity data builder allargsconstruc...
spring data jpa實體繼承
spring jpa中我們要將sql對映到物件,尤其是在spring boot這種高度自動化的環境下使用,大量的最優目錄結構與命名規則可以大大降低配置,約定大於配置貫穿其中。例如我們定義查詢dao,繼承jparepository即可。然後返回的物件,我們可以定義model entity table ...
SpringData JPA分頁查詢
首先我們需要知道springdata jpa 的幾個介面 其實看名字就大概懂了,也可以很方便的使用 首先我們的持久化層繼承jparepository,相當於繼承了增刪改查的持久化層以及分頁查詢的持久化層 所以如果我們要使用分頁查詢 我們只需要直接呼叫 由一開始的圖也可以看到pageable的其中乙個...