spring Data Jpa的分頁管理

2021-09-27 08:10:11 字數 1920 閱讀 6127

通過jpa大大簡化了我們對資料庫的開發工作。但是,之前的例子中我們只提到了最簡單的crud(增刪改查)操作。實際上,spring data jpa對於分頁以及排序的查詢也有著完美的支援,接下來,我們來學習如何通過pageable來對資料庫進行分頁查詢。

一 pageable 是spring data庫中定義的乙個介面,該介面是所有分頁相關資訊的乙個抽象,通過該介面,我們可以得到和分頁相關所有資訊(例如pagenumber、pagesize等),這樣,jpa就能夠通過pageable引數來得到乙個帶分頁資訊的sql語句。

二 page類也是spring data提供的乙個介面,該介面表示一部分資料的集合以及其相關的下一部分資料、資料總數等相關資訊,通過該介面,我們可以得到資料的總體資訊(資料總數、總頁數…)以及當前資料的資訊(當前資料的集合、當前頁數等)

spring data jpa除了會通過命名規範幫助我們擴充套件sql語句外,還會幫助我們處理型別為pageable的引數,將pageable引數轉換成為sql』語句中的條件,同時,還會幫助我們處理型別為page的返回值,當發現返回值型別為page,spring data jpa將會把資料的整體資訊、當前資料的資訊,分頁的資訊都放入到返回值中。這樣,我們就能夠方便的進行個性化的分頁查詢。

pageable只是乙個抽象的介面,那麼,家下來我們學習如何獲得pageable物件。

pageable定義了很多方法,但其核心的資訊只有兩個:一是分頁的資訊(page、size),二是排序的資訊。spring data jpa提供了pagerequest的具體實現,spring mvc提供了對spring data jpa非常好的支援,我們只提供分頁以及排序資訊即可:

public pagegetentrybyparams(@requestparam(value = "page", defaultvalue = "0") integer page,

@requestparam(value = "size", defaultvalue = "15") integer size)

在這裡,我們通過引數獲得分頁的資訊,並通過sort以及direction告訴pageable需要通過id逆序排列。spring mvc的介紹情移步這裡:spring mvc快速入門。

這裡可以看到,通過引數來得到乙個pageable物件還是比較繁瑣的,當查詢的方法比較多的時候,會產生大量的重複**。為了避免這種情況,spring data提供了直接生成pageable的方式。

public pagegetentrybypageable(@pageabledefault(value = 15, sort = , direction = sort.direction.desc)

pageable pageable)

我們可以看到,我們只需要在方法的引數中直接定義乙個pageable型別的引數,當spring發現這個引數時,spring會自動的根據request的引數來組裝該pageable物件,spring支援的request引數如下:

page,第幾頁,從0開始,預設為第0頁

size,每一頁的大小,預設為20

sort,排序相關的資訊,以property,property(,asc|desc)的方式組織,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基礎上按lastname倒序排列

這樣,我們就可以通過url的引數來進行多樣化、個性化的查詢,而不需要為每一種情況來寫不同的方法了。

通過url來定製pageable很方便,但唯一的缺點是不太美觀,因此我們需要為pageable設定乙個預設配置,這樣很多情況下我們都能夠通過乙個簡潔的url來獲取資訊了。

spring提供了@pageabledefault幫助我們個性化的設定pageable的預設配置。例如@pageabledefault(value = 15, sort = , direction = sort.direction.desc)表示預設情況下我們按照id倒序排列,每一頁的大小為15。

spring data jpa遇到的坑

1 column註解name最好全寫了,不然遇到像hibernate駝峰和下劃線風格配置變更時會出現找不到屬性,尤其開啟自動建表情況 2 唯讀操作情況,如果對讀取物件進行了屬性修改操作,那麼jpa會認為你要修改這個實體,使用hibernate的情況下回預設執行乙個update的sql,然後你懂得由於...

SpringData Jpa中count的使用

通常,我們會有統計數量的需求,jpa對一些簡單統計數量的需求通過方法名就可以解析。然而對於稍微複雜的需求則無法通過方法名解析。對於這種需求,還是需要寫sql實現。當我的repository介面繼承jparepository時,缺省會繼承它的乙個count 方法 crudrepository介面中有c...

Spring Data Jpa的複雜查詢

springjpa的複雜查詢 借助介面中定義好的方法完成查詢 統計查詢 查詢客戶的總數量 test public void testcount 判斷id為4的客戶是否存在 test public void testexists 根據id從資料庫中查詢 transactional 保證getone的正...