bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

SpringDataJPA如何進行數據分頁與排序-創新互聯

這篇文章給大家分享的是有關Spring Data JPA如何進行數據分頁與排序的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、雅安服務器托管、營銷軟件、網站建設、霍州網站維護、網站推廣。

一、導讀

如果一次性加載成千上萬的列表數據,在網頁上顯示將十分的耗時,用戶體驗不好。所以處理較大數據查詢結果展現的時候,分頁查詢是必不可少的。分頁查詢必然伴隨著一定的排序規則,否則分頁數據的狀態很難控制,導致用戶可能在不同的頁看到同一條數據。

二、實體定義

我們使用一個簡單的實體定義:Article(文章)

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name="article")
public class Article {

 @Id
 @GeneratedValue
 private Long id;

 @Column(nullable = false,length = 32)
 private String author;

 @Column(nullable = false, unique = true,length = 32)
 private String title;

 @Column(length = 512)
 private String content;

 private Date createTime;
}
  • @Entity 表示這個類是一個實體類,接受JPA控制管理,對應數據庫中的一個表

  • @Table 指定這個類對應數據庫中的表名。如果這個類名和數據庫表名符合駝峰及下劃線規則,可以省略這個注解。如FlowType類名對應表名flow_type。

  • @Id 指定這個字段為表的主鍵

  • @GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,一般主鍵為自增的話,就采用GenerationType.IDENTITY的生成方式

  • @Column 注解針對一個字段,對應表中的一列。nullable = false表示數據庫字段不能為空, unique = true表示數據庫字段不能有重復值,length = 32表示數據庫字段大程度為32.

  • @Data、@AllArgsConstructor、@NoArgsConstructor、@Builder都是插件lombok的注解,用來幫助我們生成set、get方法、構造函數等實體類的模板代碼。

三、Repository定義

定義一個接口ArticleRepository繼承 PagingAndSortingRepository。PagingAndSortingRepository接口不僅包含基礎的CURD函數,還支持排序、分頁的接口函數定義。

public interface ArticleRepository extends PagingAndSortingRepository<Article,Long> {
  //查詢article表的所有數據,傳入Pageable分頁參數,不需要自己寫SQL
 Page<Article> findAll(Pageable pageable);
 //根據author字段查詢article表數據,傳入Pageable分頁參數,不需要自己寫SQL
 Page<Article> findByAuthor(String author, Pageable pageable);
 //根據author字段和title字段,查詢article表數據,傳入Pageable分頁參數,不需要自己寫SQL
 Slice<Article> findByAuthorAndTitle(String author, String title, Pageable pageable);
}

四、實現分頁

Pageable 是Spring定義的接口,用于分頁參數的傳遞,我們看看如何使用它。首先將ArticleRepository注入到你需要進行持久層操作的類里面,通常是一個@Service注解的類,然后在服務方法內使用如下代碼進行分頁操作:查詢第一頁(從0開始)的數據,每頁10條數據。

Pageable pageable = PageRequest.of(0, 10); //第一頁
//Pageable pageable = PageRequest.of(0, 10); //第二頁
//Pageable pageable = PageRequest.of(0, 10); // 第三頁
//數據庫操作獲取查詢結果
Page<Article> articlePage = articleRepository.findAll(pageable);
//將查詢結果轉換為List
List<Article> articleList = articlePage.getContent();

findAll方法以Page類的對象作為響應,如果我們想獲取查詢結果List,可以使用getContent()方法。但是筆者不建議這樣進行轉換,因為前端展示一個分頁列表,不僅需要數據,而且還需要一些分頁信息。如:當前第幾頁,每頁多少條,總共多少頁,總共多少條。這些信息在Page(articlePage)對象里面均可以獲取到(下文中有介紹)。

五、實現排序

Spring Data JPA提供了一個 Sort對象,用以提供一種排序機制。讓我們看一下排序的方式。

articleRepository.findAll(Sort.by("createTime"));

articleRepository.findAll(Sort.by("author").ascending()
      .and(Sort.by("createTime").descending()));

第一個findAll方法是按照createTime的升序進行排序

第一個findAll方法是按照author的升序排序,再按照createTime的降序進行排序

分頁和排序在一起

Pageable pageable = PageRequest.of(0, 10,Sort.by("createTime"));

六、Slice與Page

在ArticleRepository我們看到了一個方法返回Slice和另一個方法返回了Page。它們都是Spring Data JPA的數據響應接口,其中 Page 是 Slice的子接口。它們都用于保存和返回數據。

6.1.Slice

讓我們看一下 Slice的一些重要方法。

List <T> getContent(); //獲取切片的內容

Pageable getPageable(); //當前切片的分頁信息

boolean hasContent(); //是否有查詢結果?

boolean isFirst(); //是否是第一個切片

boolean isLast(); //是否是最后一個切片

Pageable nextPageable(); // 下一個切片的分頁信息

Pageable previousPageable(); // 上一個切片的分頁信息

6.2.Page

Page是Slice的子接口,以下是的一些重要方法。

//總頁數
int getTotalPages();

//總數據條數
long getTotalElements();

那么,什么時候使用Slice?什么時候使用Page?

答:通過這兩個接口的函數定義可以看出,Slice只關心是不是存在下一個分片(分頁),不會去數據庫count計算總條數、總頁數。所以比較適合大數據量列表的的鼠標或手指滑屏操作,不關心總共有多少頁,只關心有沒有下一頁。Page比較適合傳統應用中的table開發,需要知道總頁數和總條數。

感謝各位的閱讀!關于“Spring Data JPA如何進行數據分頁與排序”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創新互聯建站vcdvsql.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享標題:SpringDataJPA如何進行數據分頁與排序-創新互聯
瀏覽地址:http://vcdvsql.cn/article12/csgodc.html

成都網站建設公司_創新互聯,為您提供外貿建站電子商務響應式網站網站設計公司搜索引擎優化網頁設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設