Java实现SQL分页
在日常开发需要对数据进行分页,配置如下
<!-- baomidou --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency>
在控制器层参数加上Page page,之后使用
page.setOptimizeCountSql(false);
了解如下
page.setOptimizeCountSql(false); 是 MyBatis 框架中的一个配置选项,用于控制是否优化分页查询中的总记录数查询 SQL。这通常用于分页查询,其中需要获取总记录数以计算总页数等信息当 page.setOptimizeCountSql(true); 时,MyBatis 将尝试优化总记录数查询 SQL,以提高性能。通常,这意味着 MyBatis 会尝试从分页查询的 SQL 语句中提取总记录数,而不会执行额外的总记录数查询当 page.setOptimizeCountSql(false); 时,MyBatis 将不进行总记录数查询的优化,而是会执行一个额外的 SQL 查询来获取总记录数。这可以保证总记录数的准确性,但可能会增加数据库的负载,尤其在处理大数据集时选择是否启用总记录数查询的优化取决于你的具体需求和性能要求。如果你可以容忍轻微的性能损失以获得更准确的总记录数,可以将其设置为 false,否则,你可以将其设置为 true 以提高性能
Page<类> page = new Page(page, pageSize);
//生成数据data
pageInfo = this.baseMapper.selectPage(page, data);
return pageInfo;
结果如下

也可以使用Pagehandle这个包
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.2</version></dependency>
获得数据后
PageHelper.startPage(页码, 页大小);
PageInfo<类> 对象= new PageInfo<>(数据);
工具类如下
@Component
public class PageInfoUtil {public static PageInfo<T> getData(List<T> data, int pageNumber, int pageSize) {PageHelper.startPage(pageNumber, pageSize);PageInfo<T> Result= new PageInfo<>(data);return Result;}
}
结果如下

最后可以自己写一个工具类
public class PaginationInfo<T> {private int pageNum; // 当前页码private int pageSize; // 每页大小private int size; // 当前页数据条数private int startRow; // 当前页的起始行private int endRow; // 当前页的结束行private long total; // 总数据条数private int pages; // 总页数private List<T> list; // 当前页的数据列表private int prePage; // 前一页页码private int nextPage; // 后一页页码private boolean isFirstPage; // 是否是第一页private boolean isLastPage; // 是否是最后一页private boolean hasPreviousPage; // 是否有前一页private boolean hasNextPage; // 是否有后一页private int navigatePages; // 导航页码数private int navigateFirstPage; // 导航页的第一页页码private int navigateLastPage; // 导航页的最后一页页码private List<Integer> navigatepageNums; // 导航页码列表// 构造函数,用于创建 PaginationInfo 对象public PaginationInfo(List<T> data, int pageNum, int pageSize) {this.pageNum = pageNum;this.pageSize = pageSize;this.list = data;this.total = data.size();this.pages = (int) Math.ceil((double) total / pageSize);if (pageNum < 1) {pageNum = 1;} else if (pageNum > pages) {pageNum = pages;}int fromIndex = (pageNum - 1) * pageSize;int toIndex = Math.min(fromIndex + pageSize, data.size());this.size = toIndex - fromIndex;this.list = data.subList(fromIndex, toIndex);this.startRow = fromIndex + 1;this.endRow = fromIndex + size;this.prePage = pageNum > 1 ? pageNum - 1 : 1;this.nextPage = pageNum < pages ? pageNum + 1 : pages;this.isFirstPage = pageNum == 1;this.isLastPage = pageNum == pages;this.hasPreviousPage = pageNum > 1;this.hasNextPage = pageNum < pages;this.navigatePages = 8; // 可以根据需要进行调整this.calcNavigatePageNumbers();if (this.navigatepageNums != null && !this.navigatepageNums.isEmpty()) {this.navigateFirstPage = this.navigatepageNums.get(0);this.navigateLastPage = this.navigatepageNums.get(this.navigatepageNums.size() - 1);}}// 计算导航页码列表private void calcNavigatePageNumbers() {navigatepageNums = new ArrayList<>();int startNum;int endNum;if (pages <= navigatePages) {startNum = 1;endNum = pages;} else {int halfPages = navigatePages / 2;startNum = pageNum - halfPages;endNum = pageNum + halfPages;if (startNum < 1) {startNum = 1;endNum = navigatePages;}if (endNum > pages) {endNum = pages;startNum = pages - navigatePages + 1;}}for (int i = startNum; i <= endNum; i++) {navigatepageNums.add(i);}}
}
测试如下
public static void main(String[] args) {// 创建一个示例数据列表List<String> dataList = new ArrayList<>();for (int i = 1; i <= 50; i++) {dataList.add("Item " + i);}// 每页显示10条数据int pageSize = 10;// 测试PaginationInfo类PaginationInfo<String> paginationInfo = new PaginationInfo<>(dataList, 1, pageSize);// 打印分页信息System.out.print("当前页:" + paginationInfo.getPageNum()+" ");System.out.print("每页大小:" + paginationInfo.getPageSize()+" ");System.out.print("总数据条数:" + paginationInfo.getTotal()+" ");System.out.print("总页数:" + paginationInfo.getPages()+" ");System.out.print("当前页数据条数:" + paginationInfo.getSize()+" ");System.out.print("是否第一页:" + paginationInfo.isFirstPage()+" ");System.out.print("是否最后一页:" + paginationInfo.isLastPage()+" ");System.out.print("前一页页码:" + paginationInfo.getPrePage()+" ");System.out.print("后一页页码:" + paginationInfo.getNextPage()+" ");// 打印当前页的数据列表List<String> currentPageData = paginationInfo.getList();System.out.println("当前页的数据:");for (String item : currentPageData) {System.out.println(item);}// 打印导航页码列表List<Integer> navigatePageNums = paginationInfo.getNavigatepageNums();System.out.println("导航页码列表:");for (Integer pageNum : navigatePageNums) {System.out.println(pageNum);}System.out.println(paginationInfo.toString());}
运行

上述方法都可以
相关文章:
Java实现SQL分页
在日常开发需要对数据进行分页,配置如下 <!-- baomidou --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency> 在控…...
软件测试进阶篇----自动化测试脚本开发
自动化测试脚本开发 一、自动化测试用例开发 1、用例设计需要注意的点 2、设计一条测试用例 二、脚本开发过程中的技术 1、线性脚本开发 2、模块化脚本开发(封装线性代码到方法或者类中。在需要的地方进行调用) 3、关键字驱动开发:selen…...
rust std
目录 一,std基本数据结构 1,std::option 2,std::result 二,std容器 1,vector 三,std算法 1,排序 2,二分 (1)vector二分 (2)…...
SpringMVC(下)
1、拦截器: 1、拦截器的配置: SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor <!--配置拦截器--><mvc:interceptors><!--对所有的请求进行拦截--><!--<bean class"com.songzhishu.m…...
分布式操作系统的必要性及重要性
总有人在各个平台留言或者私信问LAXCUS分布式操作系统的各种问题,尤其是关于分布式操作系统的应用市场、价值、意义之类的问题。我们团队做LAXCUS分布式操作系统,也不是头脑凭空发热,是基于我们之前的大量产品设计、经验逐渐一步步做起来。当…...
【Javascript】定时器
目录 延迟执行 定时执行 清除定时任务 延迟执行 setTimeout(function(){}, 毫秒) console.log(1); console.log(2); console.log(3); setTimeout(function (){console.log(5) },5000) console.log(4);setTimeout(function (){ console.log(5) },5000) 设定了一个任务&…...
基于stm32的ADC读取烟雾报警器的数值
本文想要设计一个设计一个有stm32控制的烟雾报警系统。通过MQ-2烟雾报警器将获取模拟的数值传递给stm32的ADC外设并在串口助手上显示对应的电压值。烟雾报警器浓度越高,他的电压就越高,但是不会超过3.3V。设置一个电压临界值,当传输回来的电压…...
无需更换vue-cli 脚手架 uniapp-搭建项目-H5-低版本安卓IOS兼容问题(白屏)(接口请求异常)
✨求关注~ 💻博客:www.protaos.com I. 简介 A. UniApp项目概述 B. 白屏和接口请求异常问题的背景 II. 白屏问题 A. 问题描述 1、uniapp 打包H5内嵌入APP内、低版本手机系统访问白屏问题 B. 问题根本原因 1、低版本手机系统 自带的webview内核不支持ES6语…...
【IO面试题 四】、介绍一下Java的序列化与反序列化
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:介绍一下Java的序列化与…...
M1本地部署Stable Diffusion
下载安装 参考博客: 在Mac上部署Stable Diffusion(超详细,AI 绘画入门保姆级教程) 安装需要的依赖库 brew install cmake protobuf rust python3.10 git wget 可能中途会存在下载报错或者下载卡主的问题,需要切国内源 brew进行替换源: …...
java中的内存分配
目录 1.堆内存 2.栈内存 3.常量池 4.寄存器 5.示例 6.总结 1.堆内存 堆用来存放程序中动态生产的数据,如new出来的对象。 通过new方式创建的对象,数组及字符串都有自己的内存地址。 方法调用完毕后,方法中new出来的对象就会变成垃圾…...
Matter.js 插件:matter-wrap(世界是圆的)
本文简介 点赞 关注 收藏 学会了 记得以前看爆笑校园里有一集讲到,一个人对着前面开了一枪,过了一阵子弹打中他自己的后脑勺。作者想通过这个冷笑话告诉大家一件事:地球是圆的。 在 Matter.js 世界里,默认是没有边界的&#…...
HCIA --- ACL(访问控制列表)
ACL访问控制列表 一、作用 访问控制 --- 在路由器流量进或出的接口上,匹配流量产生动作---允许、拒绝定义感兴趣流量 --- 抓取流量,之后给到其他的策略,让其他策略进行工作; 二、匹配规则 至上而下逐一匹配,上条匹…...
Xcode自定义快捷键
一、新建脚本 1. 编写脚本 把脚本sh文件保存在安全的目录,不会被删除 我这里主要是两个常用的: 1.打开终端: xcode-terminal.sh #!/bin/shif [ -n "$XcodeProjectPath" ]; then open -a Terminal "$XcodeProjectPath"/.. elseo…...
jmeter界面压测过程卡死解决思路
1、排查压测机的资源是否充足; 2、检查jmeter压测脚本,除聚合报告的所有组件关闭; 我在压测过程中出现频繁卡死,就是查看结果数和断言结果信息量过多导致: 3、直接用非gui界面形式,也就是脚本形式压测。...
听GPT 讲Rust源代码--library/std(6)
题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…...
如何使用gpt提高效率
如何使用gpt提高效率 自动化替代人力工作减少创意工作需求技术依赖风险实际应用领域内容生成自动回答问题自动化编程个性化推荐 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅&…...
配置VUE环境过程中 npm报错的处理方案以及VUE环境搭建过程
背景:VUE已经出来很久了,一直想研究这个东西也很久了。由于各种各样的原因,一直没有能处理。最近终于有时间可以研究了。 奈何报错了 嘤嘤嘤~~ 针对报错情况,其实后来没有找到什么好的方案,几经周折,终于搭…...
springboot 配置文件加载顺序
SpringBoot中配置文件的加载顺序是怎样的? 优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置会形成互补配置。 1.命令行参数。所有的配置都可以在命令行上进行指定; 2.Java系统属性(System.getProperties0) ; 3.操作系统环境变量 4.jar包外…...
二分查找java
一、题目。 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
