mybatis使用拦截器PageHelper进行分页

mybatis使用拦截器PageHelper进行分页

八月 19, 2019

分页原理

分页的分类:内存分页和物理分页

分页原理-规律

1.开始记录索引的规律(当前页-1)*每页的条数
2.一共有多少页:总记录%条数==0?总记录%条数:+1

分页原理-三个参数

1.当前页
2.每页的条数
3.总记录数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
使用方法 
1.使用 Maven
在 pom.xml 中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
最新版本号可以从首页查看。
2. 配置拦截器插件

特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor。 com.github.pagehelper.PageHelper 现在是一个特殊的 dialect 实现类,是分页插件的默认实现类,提供了和以前相同的用法。
1. 在 MyBatis 配置 xml 中配置拦截器插件

<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>

2. 在 Spring 配置文件中配置拦截器插件(暂时用不到)
3. 分页插件参数介绍(见官方文档)
4. 如何在代码中使用,分页插件支持以下几种调用方式:
//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);

实例:

1
2
3
4
5
public List<Person> getAllPersons();

<select id="getAllPersons" resultType="person">
SELECT * from person
</select>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
实现方法
public void getAllPersons()
{
SqlSession sqlSession = this.getSqlSessionFactory().openSession();
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
List<Person> persons=personMapper.getAllPersons();
//分页设置
Page<Object> page=PageHelper.startPage(1,10);//显示第一页,一页10条
PageInfo pageInfo=new PageInfo(persons,9);//获取当前页面的信息

for (Person person:persons)
{
System.out.println(person.getId());
}

//显示分页的设置信息
System.out.println(page.getPageNum());//current page
System.out.println(page.getTotal());//total
System.out.println(page.getPageSize());//page size

System.out.println(pageInfo.isIsFirstPage());//是否是第一页
System.out.println(pageInfo.getPages());// total pages总页数
int[] nums=pageInfo.getNavigatepageNums();所有页码组成的数组
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}