Java 实现 后端分页
背景说明
在实际开发中,基于数据库表结构进行SQL查询,如果要对结果进行分页,可以借助一些工具类,如:基于Mybatis的 工具类 PageHelper。
但是,有时分页的对象是经过一些业务逻辑处理的列表,如:两个列表取了交集后,或者按照一定的条件过滤后的列表,需要进行分页。
此时,在不进行前端分页的情况下,就需要用到后端分页。
JAVA实现
1、分页结果返回类
ResultList.java
package com.miracle.luna.page;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;/*** @author Miracle Luna* @date 2021/7/16*/
public class ResultList<T> implements Serializable {private static final long serialVersionUID = 1L;private final List<T> list = new ArrayList();private Integer total;public ResultList() {}public ResultList(int total, List<T> list) {this.list.addAll(list);this.total = total;}public List<T> getList() {return this.list;}public void add(T entity) {this.list.add(entity);}public void setList(List<T> list) {this.list.addAll(list);}public Integer getTotal() {return this.total;}public void setTotal(Integer total) {this.total = total;}@Overridepublic String toString() {return "ResultList(list=" + this.getList() + ", total=" + this.getTotal() + ")";}
}
2、分页工具类
PageUtil.java
package com.miracle.luna.page;import com.google.common.collect.Lists;import java.util.List;/*** @author Miracle Luna* @date 2021/7/16*/
public class PageUtil {/*** 按照传入的参数,进行分页* @param pageNum 页数* @param pageSize 每页条数* @param sourceList 源列表* @param isPage 是否分页* @param <T> 泛型对象* @return 返回结果集*/public static <T> ResultList<T> page(Integer pageNum, Integer pageSize, List<T> sourceList, Boolean isPage){ResultList<T> resultList = new ResultList<>();// 初始化总量为0,防止当列表为空的时候,total返回nullresultList.setTotal(0);List<T> pageList = sourceList;// 当列表不为空的时候,才进行数据逻辑处理if (sourceList != null && !sourceList.isEmpty()) {int sourceSize = sourceList.size();if (isPage) {pageNum = (pageNum == null || pageNum <= 0) ? 1 : pageNum;pageSize = (pageSize == null || pageSize <= 0) ? 10 : pageSize;// 步骤分解,便于理解
// int startPosition = Math.min((pageNum - 1) * pageSize, sourceSize);
// int endPosition = Math.min(pageNum * pageSize, sourceSize);
// pageList = sourceList.subList(startPosition, endPosition);// 分页的起始和截止位置,和源列表的size大小进行对比,分别取最小值pageList = sourceList.subList(Math.min((pageNum - 1) * pageSize, sourceSize), Math.min(pageNum * pageSize, sourceSize));}resultList.setList(pageList);resultList.setTotal(sourceSize);}return resultList;}public static void main(String[] args) {List<Integer> intList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7);
// List<Integer> intList = Lists.newArrayList();
// ResultList<Integer> resultList = page(1, 3, intList, false);
// ResultList<Integer> resultList = page(2, 3, intList, true);
// ResultList<Integer> resultList = page(3, 3, intList, true);
// ResultList<Integer> resultList = page(null, null, intList, true);
// ResultList<Integer> resultList = page(2, 10, intList, true);
// ResultList<Integer> resultList = page(2, 15, intList, true);
// ResultList<Integer> resultList = page(1, 15, intList, true);ResultList<Integer> resultList = page(1, 10, intList, true);System.out.println("resultList: " + resultList);}
}
3、运行结果
本次测试以Integer列表,简单举例说明;
因为工具类中的List列表使用了泛型,所以,实际使用改工具类时,传入实际业务逻辑中的对象列表即可。
resultList: ResultList(list=[1, 2, 3, 4, 5, 6, 7], total=7)
补充说明:
此处用到了google的一个工具包 guava-28.1-jre.jar;
这个包很好用,强烈推荐大家使用!!!
Maven 依赖如下:
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>32.1.2-jre</version>
</dependency>
相关文章:
Java 实现 后端分页
背景说明 在实际开发中,基于数据库表结构进行SQL查询,如果要对结果进行分页,可以借助一些工具类,如:基于Mybatis的 工具类 PageHelper。 但是,有时分页的对象是经过一些业务逻辑处理的列表,如…...
数据结构 | 搜索和排序——排序
目录 一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 五、归并排序 六、快速排序 排序是指将集合中的元素按照某种顺序排序的过程。 一、冒泡排序 冒泡排序多次遍历列表。它比较相邻的元素,将不合顺序的交换。每一轮遍历都将下一个最大值放到正确的位…...
【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】
目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理:1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别:…...
【unity】ShaderGraph实现等高线和高程渐变设色
【unity】ShaderGraph实现等高线和高程渐变设色 等高线的实现思路 方法一: 通过Position节点得到顶点的高度(y)值,将高度值除去等高距离取余,设定余数的输出边界(step) 方法二: 将…...
快速修复应用程序中的问题的利器—— Android热修复
热修复技术在Android开发中扮演着重要的角色,它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的bug或者添加新的功能。 一、热修复是什么? 热修复(HotFix)是一种在运行时修复应用程序中的问题的技术…...
什么是全局代理,手机怎么设置全局代理
目录 什么是全局代理 全局代理的优缺点 优点 缺点 手机怎么设置全局代理 注意事项 总结 在计算机网络和信息安全中,全局代理是一种常用的技术手段,用于将网络流量通过代理服务器进行转发和处理。本文将介绍什么是全局代理,探讨全局代理…...
技术领先产品ASSAR300一一基于SAR成像的角雷达产品,助力自动泊车
作为自动驾驶应用场景中最先被推广和商业化落地的自动泊车功能,目前是在一些限定环境下实现了功能跑通。面对多种多样的复杂停车场场景,系统需要不断增强感知算法能力或寻求新的传感器技术,来提升对周围环境感知和对障碍物探测的精准度。 传…...
单元测试之 - Spring框架提供的单元/集成测试注解
Spring框架提供了很多注解来辅助完成单元测试和集成测试(备注:这里的集成测试指容器内部的集成测试,非系统间的集成测试),先看看Spring框架提供了哪些注解以及对应的作用。RunWith(SpringRunner.class) / ExtendWith(SpringExtension.class)&…...
深入学习 Redis - 事务、实现原理、指令使用及场景
目录 一、Redis 事务 vs MySQL事务 二、Redis 事务的执行原理 2.1、执行原理 2.2、Redis 事务设计这么简单,为什么不涉及成 MySQL 那样强大呢? 三、Redis 事务的使用 3.1、使用场景 3.2、具体演示 开启/执行/放弃事务 watch 监控 watch 实现原理…...
异步javaScript
在本文中,我们将解释什么是异步编程,为什么我们需要它,并简要讨论 JavaScript 历史上异步函数是怎样被实现的。 预备知识:基本的计算机素养,以及对 JavaScript 基础知识的一定了解,包括函数和事件处理程序…...
看跨境电商世界区域分布,Live Market教你深入参与跨境创业
随着全球化发展带来互联网技术的进步和平台经济的触角伸向全球,跨境电商越来越成为全球贸易的重要组成部分。根据国际数据公司(IDC)的最新数据显示,全球前五大跨境电商平台分别是亚马逊、阿里巴巴、eBay、Wish和京东全球购。这五家…...
python中的装饰器的真正含义和用法
闭包: 闭包是python中的一个很实用的写法,可以使得用户在函数中调用该函数外的函数的变量,使得该变量常驻于内存中。 闭包函数: 输入是函数,输出也是一个函数。 装饰器的写法是python闭包的语法糖。 面试中经常面…...
opencv基础-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。 例如,在图 8-17 中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的…...
RocketMQ生产者和消费者都开启Message Trace后,Consume Message Trace没有消费轨迹
一、依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version> </dependency>二、场景 1、生产者和消费者所属同一个程序 2、生产者开启消…...
JDV背后的技术-助力618 | 京东云技术团队
一、项目介绍 JDV(可视化大屏)是京东内部搭建可视化大屏的数据工具平台,内置10种模版特效,40种风格各异的图表、导航等组件。与集团其他数据工具打通,支持一站式、自助化、拖拽式搭建大屏,实现数据切换、联…...
0基础学习VR全景平台篇 第78篇:全景相机-拍摄VR全景
新手入门圆周率科技,成立于2012年,是中国最早投身嵌入式全景算法研发的团队之一,亦是全球市场占有率最大的全景算法供应商。相继推出一体化智能屏、支持一键高清全景直播的智慧全景相机--Pilot Era和Pilot One,为用户带来实时畅享…...
Spring MVC简介与概述
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
java基础复习(第六日)
java基础复习(五) 1.是否了解类似 RabbitMQ.kalka 之类的队列服务? 请简述队列取务中的常见要素和使用场景? 了解,队列服务是一种应用间的通信方式,可以实现异步处理、应用解耦、流量削峰和消息通信等功能 队列服务的常见要素:…...
商用服务机器人公司【Richtech Robotics】申请纳斯达克IPO上市
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国内华达州拉斯维加斯由华人领导的商用服务机器人公司【Richtech Robotics】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市&am…...
关于nn.Embedding如何使用预定义词表
直接使用,则是没有pretrained的词表。 若要使用预定义词表,则可以用 pretrained_weight np.array(pretrained_weight) embeds.weight.data.copy_(torch.from_numpy(pretrained_weight))参考: https://wmathor.com/index.php/archives/1435/…...
避坑指南:OpenClaw接入百川2-13B-4bits量化模型常见报错大全
避坑指南:OpenClaw接入百川2-13B-4bits量化模型常见报错大全 1. 为什么选择百川2-13B-4bits量化模型 去年我在搭建个人知识管理自动化系统时,第一次尝试将OpenClaw接入本地部署的大模型。当时显存只有12GB的RTX 3060让我在模型选择上捉襟见肘ÿ…...
TurboDiffusion保姆级教程:基于Wan2.1/Wan2.2的AI视频生成快速上手
TurboDiffusion保姆级教程:基于Wan2.1/Wan2.2的AI视频生成快速上手 1. 引言 1.1 为什么选择TurboDiffusion 想象一下,你只需要输入一段文字描述,就能在几秒钟内生成一段高质量的视频。这不是科幻电影里的场景,而是TurboDiffusi…...
实战应用:基于快马平台将openclaw部署到工业零件分拣场景
在工业自动化领域,零件分拣一直是个既基础又关键的环节。最近我在一个项目中尝试用openclaw算法来解决传送带上混合零件中特定型号螺丝的识别与抓取问题,整个过程既有挑战也有不少收获,今天就来分享一下实战经验。 场景需求分析 传送带上的螺…...
千问3.5-9B操作系统概念解析:虚拟化、进程调度与内存管理精讲
千问3.5-9B操作系统概念解析:虚拟化、进程调度与内存管理精讲 1. 操作系统教学新视角 在计算机科学教育中,操作系统一直是让许多学生头疼的"硬骨头"。传统教材往往堆砌大量抽象概念,让初学者望而生畏。今天我们将展示千问3.5-9B如…...
OpenClaw代码审查助手:Qwen2.5-VL-7B生成带示意图的代码优化建议
OpenClaw代码审查助手:Qwen2.5-VL-7B生成带示意图的代码优化建议 1. 为什么需要AI代码审查助手 作为开发者,我每天都要面对大量的代码审查工作。传统的人工CR(Code Review)过程往往耗时费力,尤其是当项目规模扩大后&…...
基于SpringBoot的高校餐饮档口管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
OpenClaw数据清洗实战:千问3.5-27B处理混乱Excel表格
OpenClaw数据清洗实战:千问3.5-27B处理混乱Excel表格 1. 当Excel遇上非结构化数据:我的真实痛点 上周五下午6点,市场部的同事突然发来一份"紧急需求"——一份从20多个渠道手工合并的Excel文件,需要在下班前完成数据清…...
从乐高到变速箱:用一个完整案例,带你吃透SolidWorks自顶向下设计
从乐高到变速箱:用一个完整案例,带你吃透SolidWorks自顶向下设计 1. 为什么自顶向下设计是机械工程师的必修课 第一次用SolidWorks完成齿轮箱设计时,我犯了个典型错误——先画好所有齿轮和轴,最后才考虑箱体结构。结果发现轴承座位…...
Windows下OpenClaw安装指南:对接Phi-3-vision-128k-instruct图文模型
Windows下OpenClaw安装指南:对接Phi-3-vision-128k-instruct图文模型 1. 为什么选择OpenClawPhi-3-vision组合 去年我在处理大量图文混排的学术资料时,发现传统自动化工具难以理解图片中的表格和公式。直到尝试将OpenClaw与多模态模型结合,…...
萌新梦开始的地方
大家好,我是一名双非本科的大一新生,目前就读于计算机科学与技术这个专业,平时的兴趣爱好就是听听歌,健健身,这是我写的第一篇博客,我想以此来作为我学习编程的开始,同同时也以此来见证我在编程…...
