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());}

运行

上述方法都可以 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++求欧拉角(eigen库中暴露的一些问题)

不同顺序欧拉角转旋转矩阵对照公式 eigen库求欧拉角公式 分别试验eigen库自带的matrix.eulerAngles()函数&#xff0c;与根据上述公式推导的两种方法求欧拉角 eigen库求得欧拉角的范围一定是 x − > r o l l x->roll x−>roll方向在 [ 0 , π ] [0,π] [0,π]之间&am…

【算法题】割后面积最大的蛋糕

题目&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离 verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离 请你…

tinymce输入框怎么限制只输入空格或者回车时不能提交

项目场景&#xff1a; 项目相关背景&#xff1a; tinymce输入框只输入空格或者回车时提交的空数据毫无意义&#xff0c;所以需要限制一下 无意义的输入&#xff1a; 解决方案&#xff1a; 因为tinymce输入框传到后端的数据是代码形式&#xff0c;所以不能直接.trem&#…

测试用例的设计方法(全):等价类划分方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类&#xff1a; 等价类是指某个输入域的…

当数据库遇上深度学习:AI DataLoader 助力因子管理模型训练全流程

深度学习模型有能力自动发现变量之间的关系&#xff0c;而这些关系通常是不可见的&#xff0c;这使得深度学习可以挖掘新的因子和规律&#xff0c;为量化投资策略提供更多可能性。在传统的量化策略开发流程中&#xff0c;通常会使用 Python 或第三方工具生成因子&#xff0c;并…

SpringBoot整合MyBatis-Plus详解(二)

文章目录 SpringBoot整合MyBatis-Plus详解&#xff08;二&#xff09;MyBatis-Plus简介条件构造器和常用接口⭐Wrapper介绍QueryWrapper&#xff08;Mapper接口提供的&#xff09;和QueryChainWrapper&#xff08;Service接口提供的&#xff09;案例1&#xff1a;组装查询条件案…

Unity报错:Microsoft Visual C# Compiler version

Unity报错:Microsoft Visual C# Compiler version 问题解决方案总结 问题 Microsoft Visual C# Compiler version 2.9.1.65535 (9d34608e) Copyright © Microsoft Corporation 切换版本或者使用老项目的时候可能会出现这个报错&#xff0c;这个报错就是项目设置的问题 …

【HarmonyOS】元服务卡片展示动态数据,并定点更新卡片数据

【关键字】 元服务卡片、卡片展示动态数据、更新卡片数据 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现卡片中动态显示数据功能&#xff0c;并实现定时数据刷新。本篇文章通过实现定时刷新卡片中日期数据为例&#xff0c;讲述展示动态数据与更新数据功…

C++前缀和算法的应用:从栈中取出 K 个硬币的最大面值和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币。 每一次操作中&#xff0c;你可以从任意一个栈的 顶部 取出 1 个硬币&#xff0c;从栈中移除…

深入探究ASEMI肖特基二极管MBR60100PT的材质

编辑-Z 在电子零件领域中&#xff0c;肖特基二极管MBR60100PT因其出色的性能和广泛的应用而显得尤为关键。理解其材质不仅有助于我们深入理解其运作原理&#xff0c;也有助于我们做出更合适的电子设计。那么&#xff0c;肖特基二极管MBR60100PT是什么材质呢? 首先&#xff0c…

电厂数据可视化三维大屏展示平台加强企业安全防范

园区可视化大屏是一种新型的信息化手段&#xff0c;能够将园区内各项数据信息以图像的形式直观呈现在大屏幕上&#xff0c;便于管理员和员工进行实时监控、分析和决策。本文将从以下几个方面介绍园区可视化大屏的作用和应用。 VR数字孪生园区系统是通过将实际园区的各种数据和信…

Vue 父子组件传参、插槽

setup 函数中有两个主要的参数&#xff1a;props、context 。 props 用于接收父组件传递过来的数据&#xff0c;父传子。 context 指的是 setup 的上下文&#xff0c;它有三个属性&#xff1a;attrs、slots、emit 。 attrs 用于&#xff1a;当父组件传递过来的数据&#xff…

网络协议--BOOTP:引导程序协议

16.1 引言 在第5章我们介绍了一个无盘系统&#xff0c;它在不知道自身IP地址的情况下&#xff0c;在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题&#xff1a;&#xff08;1&#xff09;IP地址是返回的唯一结果&#xff1b;&#xff08;2&#xff09;…

布隆过滤器(Bloom Filter)初学习

目录 1、布隆过滤器是什么 2、布隆过滤器的优缺点 3、使用场景 4、⭐基于Redis的布隆过滤器插件安装 4.1 下载布隆过滤器 4.2 创建文件夹并上传文件 4.3 安装gcc 4.4 解压RedisBloom压缩包 4.5 在解压好的文件夹下输入make 4.6 将编译的好的插件拷贝到docker redis容…

Windows下安装Anaconda、Pycharm以及iflycode插件图解

目录 一、下载Anaconda、Pycharm以及iflycode插件 二、创建相关文件夹 三、Pycharm社区版安装详细步骤 四、Anaconda安装详细步骤 五、配置Pycharm 六、安装iflycode插件 Anaconda是一款集成的Python环境&#xff0c;anaconda可以看做Python的一个集成安装&#xff0c;安…

Openssl数据安全传输平台011:base64的使用

文章目录 1 base641.1 概念1.2 应用场景 2 base64 算法 &#xff08;重要&#xff09;3 openssl 中base64的使用3.1 BIO 操作3.2 base64 编码 -> bio链的写操作3.3 base64 解码 -> bio链的读操作 1 base64 1.1 概念 Base64是一种基于64个可打印字符来表示二进制数据的表…

聊聊“JVM 调优JVM 性能优化”是怎么个事?

所谓“调优”就是一个诊断和处理手段&#xff0c;最终的目标是让系统的处理能力&#xff0c;也就是“性能”达到最优化。 计算机系统中&#xff0c;性能相关的资源主要分为这几类&#xff1a; CPU&#xff1a;CPU 是系统最关键的计算资源&#xff0c;在单位时间内有限&#xf…

IDEA 断点高阶

一、按钮介绍 1.1 补充 返回断点处&#xff1a; 设置debug配置&#xff1a; 二、增加/切换debugger视图 三、window快捷键 所在行处&#xff1a; CtrlF8断点属性编辑&#xff1a; CtrlShiftF8 四、一些常用的高级功能 4.1 查看对象内存-Attach memory agent 1.勾选Atta…

react的table合并行时,出现border-bottom重复问题

背景&#xff1a; 需求是呈现一个表格&#xff0c;根据操作人跟操作时间是否相同来进行合并行数据 数据结构&#xff1a; 经过跟后端的同事商量&#xff0c;需要在每一行数据中返回rowSpanNum的值&#xff0c;前端在column中根据值来判断是否满足合并行&#xff08;没有合并行…

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰&#xff0c;PSNR15。 设置较小的干扰&#xff0c;PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…