当前位置: 首页 > news >正文

【Java】分页工具类

分页工具类

import cn.enilu.flash.bean.constant.state.Order;
import cn.enilu.flash.utils.HttpUtil;
import cn.enilu.flash.utils.StringUtil;
import cn.enilu.flash.utils.factory.Page;
import cn.enilu.flash.utils.factory.PageUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.jiexun.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort;import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class PageFactory<T> {private Logger logger = LoggerFactory.getLogger(getClass());public Page<T> defaultPage() {HttpServletRequest request = HttpUtil.getRequest();//每页多少条数据int limit = 10;if (request.getParameter("limit") != null) {limit = Integer.valueOf(request.getParameter("limit"));}String pageNum = "1";if (request.getParameter("page") != null) {pageNum = request.getParameter("page");}//每页的偏移量(本页当前有多少条)int offset = 0;if (StringUtil.isNotEmpty(pageNum)) {offset = (Integer.valueOf(pageNum) - 1) * limit;} else {offset = Integer.valueOf(request.getParameter("offset"));}//排序字段名称String sortName = request.getParameter("sort");//asc或desc(升序或降序)String order = request.getParameter("order");if (StringUtil.isEmpty(sortName)) {Page<T> page = new Page<>((offset / limit + 1), limit);return page;} else {Page<T> page = new Page<>((offset / limit + 1), limit, sortName);logger.info("sortName {}  order {}",sortName,order);if (Order.ASC.getDes().equals(order)) {logger.info("sortName {}  order {} ASC",sortName,order);Sort sort = Sort.by(Sort.Direction.ASC, sortName);page.setSort(sort);} else {logger.info("sortName {}  order {} DESC",sortName,order);Sort sort = Sort.by(Sort.Direction.DESC, sortName);page.setSort(sort);}return page;}}/*** 返回一个自定义分页类** @return*/public PageUtil<T> defaultPagePageUtil() {HttpServletRequest request = HttpUtil.getRequest();//当前页int page = 1;if (request.getParameter("page") != null) {page = Integer.valueOf(request.getParameter("page"));}//每页多少条数据int limit = 10;if (request.getParameter("limit") != null) {limit = Integer.valueOf(request.getParameter("limit"));}return new PageUtil<>(page, limit);}/*** 获取MyBatis-Plus自带的分页器** @return*/public com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> defaultMpPage() {HttpServletRequest request = HttpUtil.getRequest();//当前页int page = 1;if (request.getParameter("page") != null) {page = Integer.valueOf(request.getParameter("page"));}//每页多少条数据int limit = 10;if (request.getParameter("limit") != null) {limit = Integer.valueOf(request.getParameter("limit"));}return new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, limit);}/*** 获取MyBatis plus的返回map** @param pageData* @return*/public Map<String, Object> getMpMap(IPage<T> pageData) {// 返回结果Map<String, Object> map = new HashMap<>();// 总记录数(表示符合查询条件的总记录数,即数据库中符合条件的记录总数)map.put("total", pageData.getTotal());// 每页显示的记录数,即页面大小map.put("size", pageData.getSize());// 总页数,根据 total 和 size 计算得出map.put("pages", pageData.getPages());// 当前页码,即返回结果集的页码,从 1 开始计数map.put("current", pageData.getCurrent());// 数据列表map.put("data", pageData.getRecords());return map;}/*** 封装一个获取分页数据的方法** @param m            DAO类* @param queryWrapper 查询构造器* @param <M>          DAO泛型为mybatisPlus* @return 返回一个过滤好的分页集合*/public <M extends BaseMapper<T>> Map<String, Object> getPageMap(M m, Wrapper<T> queryWrapper) {com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> page = defaultMpPage();IPage<T> pageData = m.selectPage(page, queryWrapper);return getMpMap(pageData);}public static <T> com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> mpPage() {HttpServletRequest request = HttpUtil.getRequest();//每页多少条数据int limit = 10;if (request.getParameter("limit") != null) {limit = Integer.valueOf(request.getParameter("limit"));}Integer currentPage = 1;if (request.getParameter("page") != null) {currentPage = Integer.valueOf(request.getParameter("page"));}com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(currentPage, limit);//排序字段名称String sortName = request.getParameter("sort");if (StringUtils.isEmpty(sortName)) {//兼容性处理,默认按照id字段排序page.setOrders(OrderItem.descs("id"));return page;}String order = request.getParameter("order");if (Order.ASC.getDes().equals(order)) {page.setOrders(OrderItem.ascs(sortName));} else {page.setOrders(OrderItem.descs(sortName));}return page;}public static <T> IPage<T> getPage(List<T> list) {HttpServletRequest request = HttpUtil.getRequest();//每页多少条数据int pageSize = 10;if (request.getParameter("limit") != null) {pageSize = Integer.valueOf(request.getParameter("limit"));}Integer currentPage = 1;if (request.getParameter("page") != null) {currentPage = Integer.valueOf(request.getParameter("page"));}long startIndex = (currentPage - 1) * pageSize;long endIndex = Math.min(startIndex + pageSize, list.size());// 检查 fromIndex 是否大于 toIndexif (startIndex >= endIndex) {com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> emptyPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(currentPage, pageSize);emptyPage.setRecords(new ArrayList<>());emptyPage.setTotal(0L);return emptyPage;}List<T> pageList = list.subList((int)startIndex, (int)endIndex);com.baomidou.mybatisplus.extension.plugins.pagination.Page<T> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(currentPage, pageSize);page.setRecords(pageList);page.setTotal(list.size());return page;}
}

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.Collections;
import java.util.List;/*** @author Baichao* @date 2024-04-18*/
@Data
public class PageRes<T> {/*** 总数*/@ApiModelProperty("总数")protected long total = 0;/*** 每页显示条数,默认 10*/@ApiModelProperty("每页显示条数,默认 10")protected long size = 10;/*** 当前页*/@ApiModelProperty("当前页")protected long current = 1;/*** 查询数据列表*/@ApiModelProperty("查询数据列表")protected List<T> records = Collections.emptyList();}

相关文章:

  • Kafka ACK机制详解:数据可靠性与性能的权衡之道
  • 让大模型看得见自己的推理 — KnowTrace结构化知识追踪
  • SOC-ESP32S3部分:21-非易失性存储库
  • 【深度学习】15. Segment Anything Model (SAM) :基于提示的分割新时代
  • 密码编码器使用指南
  • Torch Geometric环境下无线通信网络拓扑推理节点数据缺失实验
  • YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
  • MySQL中count(1)和count(*)的区别及细节
  • python连接邮箱,下载附件,并且定时更新的方案
  • 【机器学习】支持向量机
  • 【速通RAG实战:进阶】17、AI视频打点全攻略:从技术实现到媒体工作流提效的实战指南
  • AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC
  • JWT 原理与设计上的缺陷及利用
  • 设计模式——适配器设计模式(结构型)
  • 数字化转型进阶:精读41页华为数字化转型实践【附全文阅读】
  • leetcode动态规划—买卖股票系列
  • Python----目标检测(《基于区域提议网络的实时目标检测方法》和Faster R-CNN)
  • 每日算法刷题Day19 5.31:leetcode二分答案3道题,用时1h
  • 34.x64汇编写法(一)
  • 端午安康(Python)
  • 织梦dedecms资讯文章类网站模板/百度信息流投放
  • 建立健全国家安全什么机制/为什么seo工资不高
  • html5高端酒水饮料企业网站模版/谷歌seo是什么职业
  • 自助建站平台便宜/山东建站
  • 视觉品牌网站建设/优化外包服务公司
  • 西安建设网站的公司哪家好/线上如何做推广