admin 管理员组文章数量: 1184232
2024年3月13日发(作者:种子哈希怎么变成磁力)
pagehelper计算总条数原理
PageHelper是Mybatis中分页插件,可以方便地对查询结果进行
分页,对于查询语句结果过多时,可以提高查询效率并减轻数据库的
压力,此外,PageHelper自带了计算总条数的功能,本文将围绕此功
能展开。
1.创建Page对象
Page是PageHelper中用来存储分页信息的对象,我们需要首先
创建一个新的Page对象,例如:
```java
Page
```
其中1表示当前页码,10表示每页显示的数据条数,这句话的含
义是从第1页开始,每页显示10条数据。
2.执行查询语句
接着,我们需要执行我们的查询语句,例如:
```java
List
ByExample(example);
```
这句话的含义是通过Example对象example来执行查询语句,将
查询结果存储在studentList中。
3.获取总条数
最后一步,我们需要通过Page对象来获取总条数,例如:
```java
long total = al();
```
其中,getTotal()方法会返回查询结果的总条数。
那么,PageHelper是如何实现计算总条数的呢?
在上述三个步骤中,我们可以发现,PageHelper主要存储了以下
信息:
- 当前页码
- 每页显示的数据条数
- 查询条件
- 排序规则
其中,前三个信息是分页相关的,而查询条件和排序规则是与分
页无关的。PageHelper会首先根据查询条件和排序规则执行实际的查
询语句,获取查询结果的总条数,将其存储在Page对象中,然后再根
据当前页码和每页显示的数据条数来获取当前页的数据。
以获取总条数为例,PageHelper中的方法调用顺序如下:
```java
public
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计算总条数的原理。
版权声明:本文标题:pagehelper计算总条数原理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1710283352a566019.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论