admin 管理员组

文章数量: 1184232


2024年3月13日发(作者:种子哈希怎么变成磁力)

pagehelper计算总条数原理

PageHelper是Mybatis中分页插件,可以方便地对查询结果进行

分页,对于查询语句结果过多时,可以提高查询效率并减轻数据库的

压力,此外,PageHelper自带了计算总条数的功能,本文将围绕此功

能展开。

1.创建Page对象

Page是PageHelper中用来存储分页信息的对象,我们需要首先

创建一个新的Page对象,例如:

```java

Page page = age(1, 10);

```

其中1表示当前页码,10表示每页显示的数据条数,这句话的含

义是从第1页开始,每页显示10条数据。

2.执行查询语句

接着,我们需要执行我们的查询语句,例如:

```java

List studentList =

ByExample(example);

```

这句话的含义是通过Example对象example来执行查询语句,将

查询结果存储在studentList中。

3.获取总条数

最后一步,我们需要通过Page对象来获取总条数,例如:

```java

long total = al();

```

其中,getTotal()方法会返回查询结果的总条数。

那么,PageHelper是如何实现计算总条数的呢?

在上述三个步骤中,我们可以发现,PageHelper主要存储了以下

信息:

- 当前页码

- 每页显示的数据条数

- 查询条件

- 排序规则

其中,前三个信息是分页相关的,而查询条件和排序规则是与分

页无关的。PageHelper会首先根据查询条件和排序规则执行实际的查

询语句,获取查询结果的总条数,将其存储在Page对象中,然后再根

据当前页码和每页显示的数据条数来获取当前页的数据。

以获取总条数为例,PageHelper中的方法调用顺序如下:

```java

public Page startPage(int pageNum, int pageSize,

boolean count) {

ze = pageSize;

m = pageNum;

= count;

if (count) {

if (reasonable == null) {

// null时,会设置为默认值

// 10w条以内,执行count查询数量,超过10w条数

据时,不再执行count查询数量,建议自行处理分页合理性。

if (pageSize <= 0 || pageSize >= 10000) {

able = ;

} else {

able = ;

}

}

if (reasonable != null && reasonable) {

// 生成count查询的sql

qlParser = new

SqlParser(configuration, countSql)

.parse(erceptors(

));

// count查询的参数集合

arameterObject =

copyParameterObject(parameterObject, boundSql);

}

}

}

```

该方法用来开始一个分页操作,其中count参数表示是否需要计

算总条数,如果count为true,则需要计算总条数,否则不需要。

当count为true时,在方法中会进行一系列操作,包括根据当

前页码和每页显示的数据条数生成limit子句(用于返回当前页的数

据),生成count查询的sql(用于计算总条数),将查询条件和查询

参数存储到Page对象中。

接着,PageHelper将生成的count查询的sql和参数传递给

Mybatis的SqlSessionFactory对象,并通过它来获取一个新的

SqlSession对象。

```java

SqlSession sqlSession =

SessionFactory().openSession();

```

然后,PageHelper将生成的count查询的sql和参数对象传递给

SqlSession对象,并通过SqlSession对象来执行count查询。

```java

PreparedStatement countStmt = null;

ResultSet rs = null;

try {

countStmt = eStatement(countSql);

BoundSql countBS = fillParameters(countStmt,

mappedStatement, countBoundSql, countParameterObject);

rs = eQuery();

if (()) {

count = g(1);

}

}

```

在执行count查询时,PageHelper会先将count查询的参数对象

进行克隆,并更新其offset和limit两个参数(PageHelper中用$符

号来标记offset和limit两个参数,在这里通过正则表达式来寻找并

替换),最后将更新后的count查询的参数对象传递给SqlSession对

象来执行查询。

执行完count查询后,PageHelper会将查询结果的总条数存储在

Page对象中,并返回该对象,此时,我们通过调用Page对象的

getTotal()方法就可以获取到查询结果的总条数了。

综上所述,PageHelper根据当前页码和每页显示的数据条数生成

分页相关的信息(包括limit子句和总条数),然后将查询条件和分

页相关信息传递给Mybatis的SqlSessionFactory对象,通过

SqlSession对象来执行实际的查询操作,最后将查询结果存储在Page

对象中,这就是PageHelper计算总条数的原理。


本文标签: 查询 条数 对象 执行 数据

更多相关文章

删除无回头路?3招拯救你刚清空的回收站,快快学起来!

2月前

“每个人都有手滑失误的瞬间,而我的这个瞬间恰好发生了清空回收站。回收站清空后我的文件还能够找回来吗?请大家给我支支招,非常感谢。” 回收站是每一部电脑都会有的一个系统文件夹,它是电脑删除文件数据的“审判所”,除了文件被执行了永

被遗忘的文件还能找到吗?掌握这三个步骤,让你的硬盘重见光芒!

2月前

“每个人都有手滑失误的瞬间,而我的这个瞬间恰好发生了清空回收站。回收站清空后我的文件还能够找回来吗?请大家给我支支招,非常感谢。” 回收站是每一部电脑都会有的一个系统文件夹,它是电脑删除文件数据的“审判所”,除了文件被执行了永

从新手到精通:Python中临时存储用'temp'

2月前

在Python中,temp是一个常见的命名约定,通常用于表示临时变量或临时存储数据的变量。"temp"一词是"temporary"的缩写,意味着它只是用于暂时存储数据,而不是长期使用。 在编程

从菜鸟到高手:快速上手技巧,轻松获取你的网卡“丢包率”数据。

2月前

平时上网延时丢包影响不大, 但对网络对战玩家那就完全不能接受了,下面小编教大家怎么测试网络延时时间,以及查看网络丢包情况,供大家参考。 同时按下键盘中的Win + R 组合快捷,如下图所示,注意小编的电脑是win10 PRO版

一文掌握:利用Windows剪贴板与clipbrd工具提升工作生产力的实战指南

2月前

简介:Windows剪贴板是操作系统中用于不同程序间传递信息的核心组件。本文将介绍其基本概念、格式多样性、clipbrd工具的功能及使用方法,以及HTML FORMAT与剪贴板的交互。剪贴板工具对于开发者、故障排查和用户体验研究等场景

提升电脑性能:通过删除pagefile.sys和hiberfil.sys释放C盘空间

2月前

通过移除 pagefile.sys 和 hiberfil.sys 文件释放C盘空间(不推荐) 点击查看 -> 选项 -> 文件夹选项 -> 查看, 取消勾选 “ 隐藏受保护的操作系统文件(推荐)” ,选择“显示

游戏化学习Linux:学霸带你玩转系统更新与管理

1月前

系统更新与维护 系统更新和维护是确保 Linux 系统稳定和高效运行的基础。无论是使用 apt、 yum还是 dnf工具,掌握这些工具的使用方法和最佳实践

Linux大挑战:游戏化掌握系统更新与管理,成为技术达人

1月前

系统更新与维护 系统更新和维护是确保 Linux 系统稳定和高效运行的基础。无论是使用 apt、 yum还是 dnf工具,掌握这些工具的使用方法和最佳实践

Docker 跳到 100% CPU,如何快速诊断和修复?

1月前

一:项目场景cpu100%排查 1、 docker 部署openjdk项目cpu100%描述 解决方案: 1、查看docker的cpu占用率:top 或者docker stats2、进入cpu占用高的docker容

SayRecy数据恢复,轻松解救你的电脑数据危机!

1月前

在我们日常清理电脑时,有时会意外删除一些有用的文件,比如重要文件、照片等。这时就需要使用数据恢复软件尝试恢复数据。 EasyRecovery是一款强大有效实现数据恢复的软件,软件占用空间小,就算你是XP系统也能轻松驾驭。界面简

解锁32位与64位操作系统的幕后知识:如何选择适合你的系统

1月前

64位系统和32位系统的区别:操作系统只是硬件和应用软件中间的一个平台 32位操作系统针对的32位的CPU设计 64位操作系统针对的64位的CPU设计 我们的CPU从原来的8位,16位,

Adobe Flash Player让你的.NRG文件编程之旅变得简单

1月前

NRG 文件是光盘映像文件的一种,通常用于存储光盘的完整副本,包括数据、文件系统和光盘的结构。在本文中,我将向您介绍如何打开和编程处理 NRG 文件。 要处理 NRG 文件,您可以使用开源的工具或库来读取和提取其中的数据。下面

从基础到进阶:VLOOKUP在Excel中的运用与优化策略

1月前

说明我下面简单说明匹配数据,详细使用方式也可以参考下面文库哈EXCEL表中如何利用VLOOKUP将2张工作表的数据匹配? countif 方式1 A列数据在B列中出现的次

硬盘坏了,数据要凉凉了吗?——硬盘坏道数据恢复,找回丢失数据的希望!

1月前

电脑硬盘坏了数据可以恢复吗?对于这种问题,还需要具体问题具体分析的,一般是可以恢复。 硬盘损坏可以分为物理损坏和逻辑损坏两种情况: 1.逻辑损坏 这通常是由于软件问题,如文件系统错误、病毒攻击、误删除、格式化等

机械硬盘损坏,数据还能起死回生吗?揭秘数据恢复秘籍

1月前

电脑硬盘坏了数据可以恢复吗?对于这种问题,还需要具体问题具体分析的,一般是可以恢复。 硬盘损坏可以分为物理损坏和逻辑损坏两种情况: 1.逻辑损坏 这通常是由于软件问题,如文件系统错误、病毒攻击、误删除、格式化等

轻松搞定Android手机的WIFI静态IP和DNS设置

1月前

想要在代码中实现设置WIFI静态IP需要有系统权限,要在manifest文件添加android:sharedUserId=“android.uid.system”,还要有系统签名。设置WIFI静态IP和之前以太网的类似,都

玩转Windows Phone 8.1应用设置:_applicationdatacontainer_localsettings全解析

1月前

最近正好有机会看到林政老师的Windows Phone 8,1的书,正好我平时都是基于用户控件之类的写写使用收获,虽然 编程中基本上都用过应用数据之类的知识,但是一直没整理过,知识越来越多,东西也越来越杂,有时候过

掌握IMX6U启动过程:内部Boot ROM、IVT、Boot data、DCD与led.bin文件详解

1月前

参考:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写以及启动头文件的详解作者:一只青木呀发布时间: 2020-08-09 17:10:00网址:BOOT R

移动硬盘无法读取是怎么回事?解决方法看这里!_读取外置硬盘

1月前

在日常办公生活中,我们仅仅使用电脑的话,已经远远不够存储我们的重要数据,这时候我们会采用移动硬盘、U盘等外置数据储存设备。它们虽然都有着小巧的体积,但是能够存储大量的信息和数据,随时和电脑连接实现数据互通,给我们的电脑工作带来极大的便

深度学习驱动的穿越火线:基于YOLO的目标检测_游戏 目标检测

1月前

一、引言 穿越火线是一款热门的多人在线射击游戏,玩家需要在游戏中快速识别和击败敌方角色。而目标检测技术可以帮助我们在游戏中实现自动化的目标识别和定位,提高玩家的游戏体验和竞争力。而YOLO算法是一种高效的目标检测算法,可以实现

发表评论

全部评论 0
暂无评论