分页工具一Pageable与Page

欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot

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");
		}
	}
posted @ 2019-08-05 16:07  LittleDonkey  阅读(31808)  评论(13编辑  收藏  举报