以下內容轉載於
在此權作爲筆記
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將會把數據的整體信息、當前數據的信息,分頁的信息都放入到返回值中。這樣,我們就能夠方便的進行個性化的分頁查詢。