分页工具一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倒序排列
Copy
@RequestMapping("list") public Page<T> getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC) Pageable pageable) { return dao.findAll(pageable); }

四.Pageable接口#

Copy
public interface Pageable { //返回要返回的页面. int getPageNumber(); // 返回要返回的项目的数量。 int getPageSize(); //根据底层页面和页面大小返回偏移量。 int getOffset(); //返回排序参数。 Sort getSort(); }

五.Page接口#

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

用于储存查询的结果集

Copy
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)
成员方法

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

七.使用#

Copy
@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 @   LittleDonkey  阅读(31971)  评论(13编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
CONTENTS