欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法

 更新時(shí)間:2019年11月07日 10:01:24   作者:字母哥博客  
這篇文章主要介紹了Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、導(dǎo)讀

如果一次性加載成千上萬(wàn)的列表數(shù)據(jù),在網(wǎng)頁(yè)上顯示將十分的耗時(shí),用戶體驗(yàn)不好。所以處理較大數(shù)據(jù)查詢結(jié)果展現(xiàn)的時(shí)候,分頁(yè)查詢是必不可少的。分頁(yè)查詢必然伴隨著一定的排序規(guī)則,否則分頁(yè)數(shù)據(jù)的狀態(tài)很難控制,導(dǎo)致用戶可能在不同的頁(yè)看到同一條數(shù)據(jù)。那么,本文的主要內(nèi)容就是給大家介紹一下,如何使用Spring Data JPA進(jìn)行分頁(yè)與排序。

二、實(shí)體定義

我們使用一個(gè)簡(jiǎn)單的實(shí)體定義: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 表示這個(gè)類是一個(gè)實(shí)體類,接受JPA控制管理,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一個(gè)表
  • @Table 指定這個(gè)類對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表名。如果這個(gè)類名和數(shù)據(jù)庫(kù)表名符合駝峰及下劃線規(guī)則,可以省略這個(gè)注解。如FlowType類名對(duì)應(yīng)表名flow_type。
  • @Id 指定這個(gè)字段為表的主鍵
  • @GeneratedValue(strategy=GenerationType.IDENTITY) 指定主鍵的生成方式,一般主鍵為自增的話,就采用GenerationType.IDENTITY的生成方式
  • @Column 注解針對(duì)一個(gè)字段,對(duì)應(yīng)表中的一列。nullable = false表示數(shù)據(jù)庫(kù)字段不能為空, unique = true表示數(shù)據(jù)庫(kù)字段不能有重復(fù)值,length = 32表示數(shù)據(jù)庫(kù)字段最大程度為32.
  • @Data、@AllArgsConstructor、@NoArgsConstructor、@Builder都是插件lombok的注解,用來(lái)幫助我們生成set、get方法、構(gòu)造函數(shù)等實(shí)體類的模板代碼。

三、Repository定義

定義一個(gè)接口ArticleRepository繼承 PagingAndSortingRepository。PagingAndSortingRepository接口不僅包含基礎(chǔ)的CURD函數(shù),還支持排序、分頁(yè)的接口函數(shù)定義。

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

四、實(shí)現(xiàn)分頁(yè)

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

Pageable pageable = PageRequest.of(0, 10); //第一頁(yè)
//Pageable pageable = PageRequest.of(0, 10); //第二頁(yè)
//Pageable pageable = PageRequest.of(0, 10); // 第三頁(yè)
//數(shù)據(jù)庫(kù)操作獲取查詢結(jié)果
Page<Article> articlePage = articleRepository.findAll(pageable);
//將查詢結(jié)果轉(zhuǎn)換為L(zhǎng)ist
List<Article> articleList = articlePage.getContent();

findAll方法以Page類的對(duì)象作為響應(yīng),如果我們想獲取查詢結(jié)果List,可以使用getContent()方法。但是筆者不建議這樣進(jìn)行轉(zhuǎn)換,因?yàn)榍岸苏故疽粋€(gè)分頁(yè)列表,不僅需要數(shù)據(jù),而且還需要一些分頁(yè)信息。如:當(dāng)前第幾頁(yè),每頁(yè)多少條,總共多少頁(yè),總共多少條。這些信息在Page(articlePage)對(duì)象里面均可以獲取到(下文中有介紹)。

五、實(shí)現(xiàn)排序

Spring Data JPA提供了一個(gè) Sort對(duì)象,用以提供一種排序機(jī)制。讓我們看一下排序的方式。

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

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

第一個(gè)findAll方法是按照createTime的升序進(jìn)行排序

第一個(gè)findAll方法是按照author的升序排序,再按照createTime的降序進(jìn)行排序

分頁(yè)和排序在一起

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

六、Slice與Page

在ArticleRepository我們看到了一個(gè)方法返回Slice和另一個(gè)方法返回了Page。它們都是Spring Data JPA的數(shù)據(jù)響應(yīng)接口,其中 Page 是 Slice的子接口。它們都用于保存和返回?cái)?shù)據(jù)。

6.1.Slice

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

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

Pageable getPageable(); //當(dāng)前切片的分頁(yè)信息

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

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

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

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

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

6.2.Page

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

//總頁(yè)數(shù)
int getTotalPages();

//總數(shù)據(jù)條數(shù)
long getTotalElements();

那么,什么時(shí)候使用Slice?什么時(shí)候使用Page?

答:通過(guò)這兩個(gè)接口的函數(shù)定義可以看出,Slice只關(guān)心是不是存在下一個(gè)分片(分頁(yè)),不會(huì)去數(shù)據(jù)庫(kù)count計(jì)算總條數(shù)、總頁(yè)數(shù)。所以比較適合大數(shù)據(jù)量列表的的鼠標(biāo)或手指滑屏操作,不關(guān)心總共有多少頁(yè),只關(guān)心有沒(méi)有下一頁(yè)。Page比較適合傳統(tǒng)應(yīng)用中的table開(kāi)發(fā),需要知道總頁(yè)數(shù)和總條數(shù)。

總結(jié)

以上所述是小編給大家介紹的Spring Data JPA進(jìn)行數(shù)據(jù)分頁(yè)與排序的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 淺析java class 文件

    淺析java class 文件

    以下是對(duì)java中的class文件進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • Java實(shí)現(xiàn)較大二進(jìn)制文件的讀、寫方法

    Java實(shí)現(xiàn)較大二進(jìn)制文件的讀、寫方法

    本篇文章主要介紹了Java實(shí)現(xiàn)較大二進(jìn)制文件的讀、寫方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 簡(jiǎn)單講解Android開(kāi)發(fā)中觸摸和點(diǎn)擊事件的相關(guān)編程方法

    簡(jiǎn)單講解Android開(kāi)發(fā)中觸摸和點(diǎn)擊事件的相關(guān)編程方法

    這篇文章主要介紹了Android開(kāi)發(fā)中觸摸和點(diǎn)擊事件的相關(guān)編程方法,包括事件偵聽(tīng)器等安卓開(kāi)發(fā)中常用的接口的基本使用方法,需要的朋友可以參考下
    2015-12-12
  • java基于poi導(dǎo)出excel透視表代碼實(shí)例

    java基于poi導(dǎo)出excel透視表代碼實(shí)例

    這篇文章主要介紹了java基于poi導(dǎo)出excel透視表代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java多線程按指定順序同步執(zhí)行

    Java多線程按指定順序同步執(zhí)行

    這篇文章主要介紹了java多線程如何按指定順序同步執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介

    Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介

    這篇文章主要介紹了Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介,Shiro?是一個(gè)強(qiáng)大靈活的開(kāi)源安全框架,可以完全處理身份驗(yàn)證、授權(quán)、加密和會(huì)話管理,本文就來(lái)介紹一下此框架的核心組成,需要的朋友可以參考下
    2023-08-08
  • idea與eclipse項(xiàng)目相互導(dǎo)入的過(guò)程(圖文教程)

    idea與eclipse項(xiàng)目相互導(dǎo)入的過(guò)程(圖文教程)

    這篇文章主要介紹了idea與eclipse項(xiàng)目相互導(dǎo)入的過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 歸并排序時(shí)間復(fù)雜度過(guò)程推導(dǎo)詳解

    歸并排序時(shí)間復(fù)雜度過(guò)程推導(dǎo)詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)排序算法之歸并排序,對(duì)歸并排序的原理及實(shí)現(xiàn)過(guò)程做了非常詳細(xì)的解讀,需要的朋友可以參考下,希望能幫助到你
    2021-08-08
  • Java反射機(jī)制(Reflection)淺析

    Java反射機(jī)制(Reflection)淺析

    這篇文章主要介紹了Java反射機(jī)制(Reflection)淺析,本文以實(shí)例講解Java的反射機(jī)制,需要的朋友可以參考下
    2014-07-07
  • SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問(wèn)題

    SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的

    這篇文章主要介紹了SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論