• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Spring Data JPA分頁查詢

    標簽: Spring Data JPA  分頁

    使用Spring Data JPA的朋友,在實際工作中經常需要用到分頁查詢。下面介紹一個簡單的分頁查詢的例子:查詢學生信息,每頁10行數據,并按成績排序。先看數據表:

     

    實現:repo需要繼承PagingAndSortingRepository,如下:

    public interface StudentRepo extends CrudRepository<StudentEntity, String>,         JpaSpecificationExecutor,
            PagingAndSortingRepository<StudentEntity, String> {
    }

    需要用到PageRequest,我們來看一下PageRequest(為方便查看,本人去掉了部分內容,并增加了注釋):

    public class PageRequest extends AbstractPageRequest {
    
    	private static final long serialVersionUID = -4541509938956089562L;
    
    	private final Sort sort;
    
    	//簡單的,指定頁碼和每頁行數
    	public PageRequest(int page, int size) {
    		this(page, size, null);
    	}
    
    	//指定頁碼、每頁行數、排序
    	public PageRequest(int page, int size, Direction direction, String... properties) {
    		this(page, size, new Sort(direction, properties));
    	}
    
    	//指定頁碼、每頁行數、排序
    	public PageRequest(int page, int size, Sort sort) {
    		super(page, size);
    		this.sort = sort;
    	}
    
    	//下一頁
    	public Pageable next() {
    		return new PageRequest(getPageNumber() + 1, getPageSize(), getSort());
    	}
    
    	//上一頁
    	public PageRequest previous() {
    		return getPageNumber() == 0 ? this : new PageRequest(getPageNumber() - 1, getPageSize(), getSort());
    	}
    
    	//第一頁
    	public Pageable first() {
    		return new PageRequest(0, getPageSize(), getSort());
    	}
    }

     我們發現,PageRequest提供了很多構造方法,根據實際情況靈活選擇。下面看實現代碼:

        public void queryStudentByPage() {
            //按分數倒序排列
            Sort sort = new Sort(Sort.Direction.DESC,"score");
            //構造PageRequest分頁條件,第一頁、每頁10行、排序條件
            PageRequest pageRequest = new PageRequest(0,10, sort);
            Page<StudentEntity> page = studentRepo.findAll(pageRequest);
            List<StudentEntity> studentEntities = page.getContent();
            for (StudentEntity studentEntity : studentEntities) {
                System.out.println(studentEntity.toString());
            }
        }

    查詢結果如下:

    Hibernate: 
        select
            studentent0_.id as id1_0_,
            studentent0_.address as address2_0_,
            studentent0_.birthday as birthday3_0_,
            studentent0_.name as name4_0_,
            studentent0_.school as school5_0_,
            studentent0_.score as score6_0_,
            studentent0_.tel as tel7_0_ 
        from
            t_student studentent0_ 
        order by
            studentent0_.score desc limit ?
    Hibernate: 
        select
            count(studentent0_.id) as col_0_0_ 
        from
            t_student studentent0_
    
    StudentEntity{id='6c09a952f5b9474fb56996db642e7bab', name='沙鴻飛', address='玉龍小區', tel='12314512312311', school='青大附中', birthday='2001-03-01', score=99}
    StudentEntity{id='c46800036ea94caea07c1f2b90576c2f', name='趙繼峰', address='菜市場', tel='12314512312311', school='大慶中學', birthday='2002-03-11', score=99}
    StudentEntity{id='6b2bc83ff6ea4f7aa95986e3eeb1883f', name='趙六', address='玉龍小區', tel='12314512312311', school='青大附中', birthday='2001-03-01', score=98}
    StudentEntity{id='76a5fad795aa4605b43daf9c5f4e8edd', name='張逸杰', address='菜市場', tel='12314512312311', school='勝利中學', birthday='2002-03-11', score=98}
    StudentEntity{id='81fbeb9e7e8749e78c2495e169766274', name='呂春芳', address='柏景灣', tel='12314512312311', school='實驗中學', birthday='2000-03-11', score=98}
    StudentEntity{id='b6ef1f42e8a64367abc251af22246870', name='郎芬', address='菜市場', tel='12314512312311', school='西城中學', birthday='2001-03-11', score=98}
    StudentEntity{id='bc56bad3fd4e4604abe8a1c4ee2c1f66', name='李海峰', address='菜市場', tel='12314512312311', school='明湖中學', birthday='2002-02-11', score=98}
    StudentEntity{id='ded2215cfbb846d296aece2531bce6b8', name='趙九', address='巖石寨', tel='12314512312311', school='中山一小', birthday='2001-01-01', score=98}
    StudentEntity{id='e838a9fbbd4240d5a0922d1112b2171d', name='錢十', address='南淮安', tel='12314512312311', school='西城中學', birthday='2001-03-31', score=98}
    StudentEntity{id='babee95b37c04db38c0e74d923521ec5', name='錢十', address='南淮安', tel='12314512312311', school='山大附中', birthday='2001-03-11', score=89}

    通過控制臺打印出的sql我們發現里面通過limit限定返回從第幾行到第幾行的數據,另外發現不光查詢了前10行的數據,還統計了總條數。那是因為返回的結果Page提供getTotalPages(獲取總頁數)、getTotalElements(獲取總行數)等方法,需要在查詢的時候獲取總的數據行數。

     

    版權聲明:本文為liuyunyihao原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/liuyunyihao/article/details/81266090

    智能推薦

    spring data jpa簡單crud操作以及多表關聯,分頁排序,復雜條件查詢

    分頁和多表關聯查詢有多種方式 @Query使用 單表查詢所有: 單表分頁查詢 多表分頁查詢 調試結果如下: 此時只能看到subject中的信息,如果我想看到與之關連的subject_auth中的信息。可以做一對一的配置 其結果如下: 查詢優化 上述都是select *查詢所有的操作。如果我只想查詢部分字段。。 注意:想當然的如果這樣寫 Caused by: java.sql.SQLExceptio...

    spring data jpa使用Pageable,ExampleMatcher進行分頁多條件查詢

    一般簡單的查詢,可以使用,findByName,findById等方法,但是當這種方法越來越多的時候,就會顯得特別冗雜,這個時候就需要把方法進行合并,spring data jpa提供了一種Query by Example的方法。 當僅使用簡單查詢的時候 這種查詢會將實體中所有不為空的屬性(包括父類的)都作為查詢條件 上述內容可以看到,由于修改時間和創建時間有默認值,也當成了查詢條件,這并不是我們...

    使用eclipse搭建spring-data-jpa項目 條件 分頁 排序查詢 事務

    內容 我們要做什么 你需要有這些準備 代碼及相關配置文件 pom文件 application.properties文件 mysql數據庫建表 Customer表 TrainInfo表 TicketRecord表 整體項目結構 各個代碼文件 Customer.java TicketRecord.java TrainInfo.java CustomerRepository.java TicketRec...

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    猜你喜歡

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    Spark Streaming處理文件(本地文件以及hdfs上面的文件)

    標題介紹文件流之前先介紹一下Dstream 下面是來自官網一段的說明,Discretized Streams或DStream是Spark Streaming提供的基本抽象。它表示連續的數據流,可以是從源接收的輸入數據流,也可以是通過轉換輸入流生成的已處理數據流。在內部,DStream由一系列連續的RDD表示,這是Spark對不可變的分布式數據集的抽象(有關更多詳細信息,請參見Spark編程指南)。...

    《痞子衡嵌入式半月刊》 第 8 期

    痞子衡嵌入式半月刊: 第 8 期 這里分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農歷年分二十四節氣,希望在每個交節之日準時發布一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 :《痞子衡嵌入式半月刊: 第 7 期》 嘮兩句 今天是小滿,小滿節氣意味著進入了大幅降水的雨季。痞子...

    (C++)二叉樹的線索化 / 線索二叉樹

    好久不見,朋友們!雖然我知道沒人看我的博客,但我還是想叨逼叨一下。啊,好久沒編程了(其實也就一周沒編),但你們知道,程序員一天不編程那能叫程序員么???雖然我不是程序員哈哈哈哈哈,但還是要有基本素養嘛。 繼續寫二叉樹,給自己立一個flag,就是這幾天要寫完之前沒做完的幾道題,和二叉樹紅黑樹各種樹之類的~~雖然有這個flag,但我還是很實誠地遵從自己的內心,買了一張明天的電影票,等我回來告訴你們好不...

    精品国产乱码久久久久久蜜桃不卡