分页利器——pageHelper分页插件

article/2025/11/3 18:05:16

pageHelper插件在分页上有哪些优势?

分页插件给我们封装了很多参数,不用我们再去硬性编码获取各种参数。
pageHelper封装参数如下,这个参数封装在com.github.pagehelper.page中:

 
  1. count:是否进行count查询,也就是是否进行总条数查询
  2. pageNum:当前页码
  3. pageSize:每页显示的数量
  4. startRow:起始行
  5. endRow:末行
  6. total:总数
  7. pages:总页数
  8. reasonable:分页合理化
  9. pageSizeZero:每页条数为0时是否显示所有数据
  10. countColumn:进行count查询的列名
  11. orderBy:排序
  12. orderByOnly:只增加排序

pageHelper插件核心源码有哪些?

Dialect:

分页查询从两个角度,一个是分页方式,另个是数据库类型,这是所有方式和数据库类型的方法约束接口
  1. skip:跳过count和分页查询
  2. beforeCount:判断进行count查询还是beforePage查询,返回值为true执行count查询
  3. getCountSql:生成count查询sql
  4. afterCount:执行count查询后执行的逻辑
  5. processParamterObject:处理查询参数对象
  6. beforePage:判断进行分页查询还是返回默认结果,返回true会进行分页查询
  7. getPageSql:生成分页查询sql
  8. afterAll:完成所有任务后执行
  9. setProperties:设置参数

AbstractDialect:

这个抽象类只为了实现一个方法,就是生成获取count的sql,这一过程是通过调用CountSqlParser来实现的。
  1. getCountSql:调用了CountSqlParser的getSmartCountSql方法

AbstractHelperDialect:

物理分页方式的接口,也就是需要多少数据查找多少数据
  1. processPageParamter:处理分页参数
  2. getPageSql:单独处理分页部分
  3. handleParamter:执行sql参数的处理

AbstractRowBoundsDialect:

逻辑分页方式的接口,将所有的数据全部查找出来,需要哪些就截取哪些,有可能会造成内存溢出的问题
  1. getPageSql:生成分页查询的sql

CountSqlParser:

通过解析sql,提供更智能的sql来获取count,这个问题是分页问题的痛点,可惜的是pageHelper仍然无法避免对于count的全表扫描
  1. addAggregateFunctions:向框架中添加聚合函数,避免由于聚合引起总条数查找错误,pageHelper本身已经初始化了常用的聚合函数。
  2. getSmartCountSql:通过列表sql获取智能的count获取sql,如果解析失败等意外,直接调用getSimpleCountSql方法
  3. getSimpleCountSql:通过列表sql一般的获取count语句
  4. sqlToCount:将sql转换为count查询
  5. isSimpleCount:判断是否可以使用一般的获取count语句,sql中不包含聚合、去重、列名带参数、函数,则可以使用一般的获取count语句
  6. processSelectBody:处理selectBody去除order by语句
  7. processPlainSelect:处理PlainSelect类型的selectBody去除order by语句
  8. processWithItemsList:处理withItem去除order by语句
  9. processFromItem:处理子查询去除order by语句
  10. orderByHashParameters:判断order by是否包含参数,包含参数不能去除

PageMethod:

分页的方法类,pageHelper继承此类,对所有操作进行拦截操作
  1. setLocalPage:设置page参数
  2. getLocalPage:获取page参数
  3. clearPage:清除本地page参数
  4. count:获取任意查询方法的count总数
  5. startPage:开始分页
  6. offsetPage:开始分页
  7. orderBy:排序
  8. setStaticProperties:设置参数

pageHelper能避免count查询进行全表扫描吗?

通过对于pageHelper源码的学习,发现他没能解决count获取的时候全表扫描的问题,而真实开发的时候,我们一会会选择innoDB引擎的数据库,这个数据库使用count函数会进行全表扫描。
所以pageHelper没能解决这个问题挺失望的,虽然如此,但是pageHelper仍然可以解决代码臃肿的问题,仍然可以是分页插件的首选。
如果真的需要总条数的情况,也不想因为分页进行全表扫描,只能进行试错,我们直接返回前端10w或者100w或者更多的总数,只有当访问最后一页,才能返会真实条数。

作者:积书网熊叔 更多免费学习资源尽在#积书网www.jeacher.com


http://chatgpt.dhexx.cn/article/KiqrO3Ua.shtml

相关文章

分页插件--PageHelper

mybatis的分页查询可以通过PageHelper插件实现 在数据库中我们使用分页查询的sql语句为: select * from 表名 [where 条件] limit (page-1)*pageSize, pageSize; page: 当前页码 pageSize: 每页显示的条数。但是当我们使用PageHelper插件后页码什么的都不用我们计算…

分页插件

10-分页插件-分页插件的介绍 分页可以将很多条结果进行分页显示。如果当前在第一页,则没有上一页。如果当前在最后一页,则没有下一页。需要明确当前是第几页,这一页中显示多少条结果。MyBatis分页插件总结 在企业级开发中,分页也是…

MyBatis-Plus 插件篇 >分页插件

目标: 懂得使用 Mybatis-Plus 进行分页查询 实现步骤: 1、编写分页插件 2、测试分页功能 一、分页插件PaginationInnerInterceptor MyBatis-Plus 的分页实现还是使用的动态拼接Limit分页 二、测试用例 1、编写分页插件 /*分页插件*/Beanpublic Pagi…

分页插件 - PageHelper的介绍和使用

PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、 oracle、mariaDB、DB2、SQLite、Hsqldb等。 PageHelper使用 引入分页插件有下面两种方式: ① 引入jar包,以下…

[一起学习pytorch吧]之torch.sign函数

Hello,大家好!今天为大家讲解以下pytorch的sign函数。 torch.sign(input, outNone) → Tensor 该函数的作用就是输出input通过sign函数后的张量,其中sign函数就是符号函数,如下图所示。 例子: >>> a torch…

Python】Numpy库之符号函数sign()的介绍及用法

1、sign()函数功能介绍 sign()是Python的Numpy中的取数字符号(数字前的正负号)的函数。 2、sign()函数用法代码演示 import numpy as np dataArr [-0.2, -1.1, 0, 2.3, 4.5, 0.0] print(“输入数据为:”) print(dataArr) signResult np.sig…

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数 一、概述 1、本文系统的整理了,Oracle中常见的几个函数用法,都是涉及到条件判断分支类的相关函数,分别是 CASE ..WHEN ; DECODE , SIGN 。 2、假设有一张表Student &…

matlab中sign函数的使用(提取符号)

仅用于记录自己学习过程中遇到的函数 matlab中sign函数的使用,提取符号 一、语法 Y sign(x) 返回与 x 大小相同的数组 Y,其中 Y 的每个元素是: 1,前提是 x 的对应元素大于 0。 0,前提是 x 的对应元素等于 0。 -1&am…

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 目录 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R 语言特点 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R可以在CR…

c语言中sign的用法,Excel教程中sign函数用法和实例详解

第一,sign函数用法说明 excel教程中sign函数用于返回数字的符号。正数为1,零为0,负数为-1。 sign函数语法:SIGN(number) SIGN符号函数(一般用sign(x)表示)是很有用的一类函数,其功能是取某个数的符号(正负零)&#xff…

R语言sign函数判断数值为正数或者负数实战

R语言sign函数判断数值为正数或者负数实战 目录 R语言sign函数判断数值为正数或者负数实战 #基本语法 #正负数判断 #基本语法 sign(5) # Basic R syntax of sign function #正负数判断 sign(-2:5) # Apply sign function # -1 -1 0 1 1 1 1 1 参…

matlab2c使用c++实现matlab函数系列教程-sign函数

全栈工程师开发手册 (作者:栾鹏) matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 matlab2c调用方法: 1、下载动态链接库 2、将Matlab2c.dll拷贝到exe同目录下 3、将Matlab2c.h、Matlab2c.lib放…

matlab中sign函数用法

sign本身就有就有符号标志之意.故sign为符号函数! sign(整数)1; sign(负数)-1; sign(零)0; matlab运行例子:

mysql中sign函数_Oracle中sign函数和decode函数的使用

在逻辑编程中,经常用到If ndash; Then ndash;Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法 1.比较大小函数SIGN sign(x)或者Sign(x)叫做符号函数,其功能是取某个数的符号(正或负): 当x>0&…

c语言中sign的用法,sign函数用法和实例详解

内容提要:本文从用法和实例入手,介绍了Excel中sign函数的应用。 第一,sign函数用法说明 sign函数用于返回数字的符号。正数为1,零为0,负数为-1。 sign函数语法:SIGN(number) SIGN符号函数(一般用sign(x)表示…

【Python】Numpy库之符号函数sign()的介绍及用法

转载:https://blog.csdn.net/lyq_12/article/details/86645425 1、sign()函数功能介绍 sign()是Python的Numpy中的取数字符号(数字前的正负号)的函数。 2、sign()函数用法代码演示 #导入numpy库 import numpy as np#输入数据 dataArr [-0…

Opencv实现Sift、Surf、ORB特征提取与匹配

在opencv3中,这三个算子都转移到一个名为xfeature2d的第三方库中,而在opencv2中这三个算子在nonfree库中。 关于在vs下配置opencv可参考我转载的另外一篇文章。注意版本号不一样修改对应的lib就好了。 一.SIFT Scale Invariant Feature Transform(SIFT)…

CDA学习之Pandas - 常用函数和75个高频操作

目录 一、函数1.1 常用函数1.1.1 导⼊数据1.1.2 导出数据1.1.3 查看数据1.1.4 数据选取1.1.5 数据处理1.1.6 数据分组和排序1.1.7 数据合并1.1.8 数据显示 1.2 函数列表1.2.1 统计汇总函数1.2.2 数据清洗函数1.2.3 数据筛选函数1.2.4 绘图与元素级运算函数1.2.5 时间序列函数1.…

基于DCT离散余弦变换的自适应水印算法的设计

文章目录 前言一、目的和需求分析1.1项目设计目的1.2项目需求分析 二、图像预处理2.1 图像预处理的作用2.2 Logistic混沌映射置乱2.2 细胞自动机处理均值滤波平滑处理 三、自适应水印算法设计3.1 JPEG量化矩阵3.2 DCT频率敏感度矩阵3.3 自适应频带选择3.4 水印算法定义3.4.1 水…

线性代数知识

一、行列式(数) 1.性质(对行、列都成立) 1.转置值不变2.互换两行,值变号3.两行元素完全相同,值为04.行列式某一行元素加上另一行对应元素的k倍,D不变。5.某一行元素与另一行元素的代数余子式的乘积之和06.用数k乘&quo…