我如何编写一个高效的多页内容展示分页工具类?

2026-05-19 13:241阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计567个文字,预计阅读时间需要3分钟。

我如何编写一个高效的多页内容展示分页工具类?

这是一个实用的分页类,很多人都用过mybatis-plus自带的分页插件。这种插件的原理是拼接SQL语句,在后面添加limit和offset来实现分页。这是查询数据库后返回结果的分页方式。

这是一个实用的分页类

可能很多人都用过mybatis-plus自带的分页插件吧
这款插件的原理是拼接sql语句 在后面加limit offset
那么!这是查数据库后返回的结果的分页方式对吧!
那如果你的结果不是从数据库查的 是调api查的hadoop的状态呢?
比如你的结果是一个List 每一条都是又臭又长 你的页面就那么大 你不可能一次加载所有内容给用户看
这时候 就需要写一个类来进行分页后返回给前端
分享一个我今天写的实用工具类

class PageResult 分页返回类

import lombok.Data; @Data public class PageResult { private boolean success; private String msg; private Object content; private PageVO pageVO; public PageResult() { } public PageResult(boolean success, String msg, Object content, PageVO pageVO) { this.success = success; this.msg = msg; this.content = content; this.pageVO = pageVO; } public static PageResult success(Object content, PageVO pageVO) { return new PageResult(true, "请求成功", content, pageVO); } }

class PageVO 记录分页信息的类

import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class PageVO { /*** * 当前页码 */ private long cur=1; /*** * 单页尺寸 */ private long size =5; /*** * 总记录数 */ private long totalRecords; /*** * 总页码 */ private long totalPages; } 重头戏 # 工具类 PageUtils

package com.starnet.yarnmonitor.utils; import com.starnet.yarnmonitor.handler.ApiException; import com.starnet.yarnmonitor.vo.result.PageVO; import java.util.ArrayList; import java.util.List; public class PageUtils { /** * 将List转换成PageVo * * @param list 裁剪前的结果 * @param cur 请求的第几页 从1开始 * @param size 请求的当前页面尺寸 */ public static PageVO getPageVoFromList(List list, Integer cur, Integer size) { PageVO pageVO = new PageVO(); if (cur != null) { pageVO.setCur(cur); } if (size != null) { pageVO.setSize(size); } pageVO.setTotalRecords(list.size()); //总页码 int totalPages = (int) Math.ceil((double) list.size() / pageVO.getSize()); pageVO.setTotalPages(totalPages); return pageVO; } public static List getPagedList(List list, Integer cur, Integer size) { if (cur==null){ cur = 1; } if (size==null){ size = 5; } List resList = new ArrayList(); int start = (cur - 1) * size; if (start>=list.size()){ throw new ApiException("请求页面超出限制,该页面无内容"); } for (int i = start, j = size; j > 0 && i < list.size(); i++, j--) { resList.add(list.get(i)); } return resList; } }

我如何编写一个高效的多页内容展示分页工具类?

本文共计567个文字,预计阅读时间需要3分钟。

我如何编写一个高效的多页内容展示分页工具类?

这是一个实用的分页类,很多人都用过mybatis-plus自带的分页插件。这种插件的原理是拼接SQL语句,在后面添加limit和offset来实现分页。这是查询数据库后返回结果的分页方式。

这是一个实用的分页类

可能很多人都用过mybatis-plus自带的分页插件吧
这款插件的原理是拼接sql语句 在后面加limit offset
那么!这是查数据库后返回的结果的分页方式对吧!
那如果你的结果不是从数据库查的 是调api查的hadoop的状态呢?
比如你的结果是一个List 每一条都是又臭又长 你的页面就那么大 你不可能一次加载所有内容给用户看
这时候 就需要写一个类来进行分页后返回给前端
分享一个我今天写的实用工具类

class PageResult 分页返回类

import lombok.Data; @Data public class PageResult { private boolean success; private String msg; private Object content; private PageVO pageVO; public PageResult() { } public PageResult(boolean success, String msg, Object content, PageVO pageVO) { this.success = success; this.msg = msg; this.content = content; this.pageVO = pageVO; } public static PageResult success(Object content, PageVO pageVO) { return new PageResult(true, "请求成功", content, pageVO); } }

class PageVO 记录分页信息的类

import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class PageVO { /*** * 当前页码 */ private long cur=1; /*** * 单页尺寸 */ private long size =5; /*** * 总记录数 */ private long totalRecords; /*** * 总页码 */ private long totalPages; } 重头戏 # 工具类 PageUtils

package com.starnet.yarnmonitor.utils; import com.starnet.yarnmonitor.handler.ApiException; import com.starnet.yarnmonitor.vo.result.PageVO; import java.util.ArrayList; import java.util.List; public class PageUtils { /** * 将List转换成PageVo * * @param list 裁剪前的结果 * @param cur 请求的第几页 从1开始 * @param size 请求的当前页面尺寸 */ public static PageVO getPageVoFromList(List list, Integer cur, Integer size) { PageVO pageVO = new PageVO(); if (cur != null) { pageVO.setCur(cur); } if (size != null) { pageVO.setSize(size); } pageVO.setTotalRecords(list.size()); //总页码 int totalPages = (int) Math.ceil((double) list.size() / pageVO.getSize()); pageVO.setTotalPages(totalPages); return pageVO; } public static List getPagedList(List list, Integer cur, Integer size) { if (cur==null){ cur = 1; } if (size==null){ size = 5; } List resList = new ArrayList(); int start = (cur - 1) * size; if (start>=list.size()){ throw new ApiException("请求页面超出限制,该页面无内容"); } for (int i = start, j = size; j > 0 && i < list.size(); i++, j--) { resList.add(list.get(i)); } return resList; } }

我如何编写一个高效的多页内容展示分页工具类?