4-SpringData-分頁

以下內容轉載於

http://www.cnblogs.com/fzng/tag/SpringData/

在此權作爲筆記

1. 創建PagingAndSortingRepository

import org.springframework.data.repository.PagingAndSortingRepository;
import com.wzw.springdata.model.Employee;

public interface EmployeeRepository4 extends PagingAndSortingRepository<Employee, Integer>{

}

2. 編寫分頁測試方法

    @Test
    public void fun10() {
        //模擬分頁請求-index從0開始
        Pageable pageable = new PageRequest(0, 10);
        System.out.println("pageable: " + pageable);
        Page<Employee> emps = er4.findAll(pageable);
        System.out.println("emps: " + emps);
        System.out.println("查詢總頁數: " + emps.getTotalPages());
        System.out.println("查詢總記錄數: "+ emps.getTotalElements());
        System.out.println("查詢當前頁數: " + emps.getNumber());
        System.out.println("查詢當前頁面的集合: " + emps.getContent());
        System.out.println("查詢當前頁面的記錄數: " + emps.getNumberOfElements());
        System.out.println("分頁一頁數: " + emps.getSize());
    }

運行結果:

pageable: Page request [number: 0, size 10, sort: null]
Hibernate: 
    select
        employee0_.id as id1_0_,
        employee0_.age as age2_0_,
        employee0_.name as name3_0_ 
    from
        Employee employee0_ limit ?
emps: Page 1 of 1 containing com.wzw.springdata.model.Employee instances
查詢總頁數: 1
查詢總記錄數: 7
查詢當前頁數: 0
查詢當前頁面的集合: [Employee [id=1, name=root, age=18], Employee [id=2, name=test1, age=25], Employee [id=3, name=test12, age=18], Employee [id=4, name=test13, age=18], Employee [id=5, name=test121, age=18], Employee [id=6, name=test14, age=19], Employee [id=7, name=test2018, age=20]]
查詢當前頁面的記錄數: 7
分頁一頁數: 10

3. 編寫排序測試方法

    @Test
    public void fun11() {
        //根據id進行降序(從大到小)
        Sort.Order order = new Sort.Order(Sort.Direction.DESC, "id");
        System.out.println("order: " + order);
        Sort sort = new Sort(order);
        System.out.println("sort: " + sort);

        //分頁
        Pageable pageable = new PageRequest(0, 5, sort);
        System.out.println("pageable: " + pageable);
        Page<Employee> emps = er4.findAll(pageable);
        System.out.println("emps: " + emps);
        System.out.println("查詢總頁數: " + emps.getTotalPages());
        System.out.println("查詢總記錄數: "+ emps.getTotalElements());
        System.out.println("查詢當前頁數: " + emps.getNumber());
        System.out.println("查詢當前頁面的集合: " + emps.getContent());
        System.out.println("查詢當前頁面的記錄數: " + emps.getNumberOfElements());
        System.out.println("分頁一頁數: " + emps.getSize());
    }

運行結果:

order: id: DESC
sort: id: DESC
pageable: Page request [number: 0, size 5, sort: id: DESC]
Hibernate: 
    select
        employee0_.id as id1_0_,
        employee0_.age as age2_0_,
        employee0_.name as name3_0_ 
    from
        Employee employee0_ 
    order by
        employee0_.id desc limit ?
Hibernate: 
    select
        count(employee0_.id) as col_0_0_ 
    from
        Employee employee0_
emps: Page 1 of 2 containing com.wzw.springdata.model.Employee instances
查詢總頁數: 2
查詢總記錄數: 7
查詢當前頁數: 0
查詢當前頁面的集合: [Employee [id=7, name=test2018, age=20], Employee [id=6, name=test14, age=19], Employee [id=5, name=test121, age=18], Employee [id=4, name=test13, age=18], Employee [id=3, name=test12, age=18]]
查詢當前頁面的記錄數: 5
分頁一頁數: 5

4. PagingAndSortingRepository

BlogRepository定義了這樣一個方法:Page findByDeletedFalse(Pageable pageable);,我們主要關注它的參數以及返回值。
Pageable 是Spring Data庫中定義的一個接口,該接口是所有分頁相關信息的一個抽象,通過該接口,我們可以得到和分頁相關所有信息(例如pageNumber、pageSize等),這樣,Jpa就能夠通過pageable參數來得到一個帶分頁信息的Sql語句。
Page類也是Spring Data提供的一個接口,該接口表示一部分數據的集合以及其相關的下一部分數據、數據總數等相關信息,通過該接口,我們可以得到數據的總體信息(數據總數、總頁數…)以及當前數據的信息(當前數據的集合、當前頁數等)
Spring Data Jpa除了會通過命名規範幫助我們擴展Sql語句外,還會幫助我們處理類型爲Pageable的參數,將pageable參數轉換成爲sql’語句中的條件,同時,還會幫助我們處理類型爲Page的返回值,當發現返回值類型爲Page,Spring Data Jpa將會把數據的整體信息、當前數據的信息,分頁的信息都放入到返回值中。這樣,我們就能夠方便的進行個性化的分頁查詢。

發佈了44 篇原創文章 · 獲贊 42 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章