分頁工具一Pageable與Page


import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;

1.Pageable概述

Page<User> findByAge(int age, Pageable pageable);

Pageable 是Spring Data庫中定義的一個接口,用於構造翻頁查詢,是所有分頁相關信息的一個抽象,通過該接口,我們可以得到和分頁相關所有信息(例如pageNumber、pageSize等),這樣,Jpa就能夠通過pageable參數來得到一個帶分頁信息的Sql語句。

2.Pageable實現:PageRequest

靜態方法獲取對象

static PageRequest of(int page, int size)static PageRequest of(int page, int size, Sort sort)

3.直接獲取Pageable對象

我們只需要在方法的參數中直接定義一個pageable類型的參數,當Spring發現這個參數時,Spring會自動的根據request的參數來組裝該pageable對象

Spring支持的request參數如下:

  • page,第幾頁,從0開始,默認為第0頁
  • size,每一頁的大小,默認為20
  • sort,排序相關的信息,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基礎上按lastname倒序排列
@RequestMapping("list")
public Page<T> getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC) 
                                    Pageable pageable) {
    return dao.findAll(pageable);
}

四.Pageable接口

public interface Pageable {
    
    //返回要返回的頁面.
    int getPageNumber();

    // 返回要返回的項目的數量。
    int getPageSize();
    
    //根據底層頁面和頁面大小返回偏移量。
    int getOffset();

    //返回排序參數。
    Sort getSort();
}

五.Page接口

Page<User> findByAge(int age, Pageable pageable);

用於儲存查詢的結果集

public interface Page<T> extends Iterable<T> {
 
    int getNumber();			//當前第幾頁,總是非負的
 
    int getSize();			//@常用:返回當前頁面的大小。
 
    int getTotalPages();         //@常用:返回分頁總數。
 
    int getNumberOfElements();   //返回當前頁上的元素數。
 
    long getTotalElements();    //@常用:返回元素總數。
 
    boolean hasPreviousPage();  //返回如果有上一頁。
 
    boolean isFirstPage();      //返回當前頁是否為第一頁。
 
    boolean hasNextPage();      //返回如果有下一頁。
 
    boolean isLastPage();       //返回當前頁是否為最后一頁。
 
    Iterator<T> iterator();
 
    List<T> getContent();     //@常用:將所有數據返回為List
 
    boolean hasContent();     //返回數據是否有內容。
 
    Sort getSort();          //返回頁的排序參數。
}

六.Page接口實現PageImpl

構造函數PageImpl(List<T> content)PageImpl(List<T> content, Pageable pageable, long total)
成員方法

List<T>	getContent()
Pageable	 getPageable()
long	getTotalElements()
int	getTotalPages()
Sort	getSort()
int	getSize()

七.使用

    @GetMapping("/showMarkerByPage/{page}")
	public Result showMarkerController(@PathVariable("page") int page){
		PageRequest pageRequest = PageRequest.of(page, 5);
		Page<Marker> markerPage = markerService.findMarker(pageRequest);
		for (int i = 0; i < markerPage.getContent().size(); i++) {
			System.out.println(markerPage.getContent().get(i));
			System.out.println(markerPage.getTotalElements());
		}
		if (markerPage.getContent()!=null) {
			return ResultUtil.success(markerPage.getContent(), "/showMarker");
		}else {
			return ResultUtil.error(1, "查詢失敗", "/showMarker");
		}
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM