1.PageHelper 分页插件简介

  1. PageHelper是MyBatis中非常方便的第三方分页插件

  2. 官方文档:

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

  1. 我们可以对照官方文档的说明,快速的使用插件

2.PageHelper的使用步骤

  1. 导入以下jar包

pagehelper-5.0.0.jar

jsqlparser-0.9.5.jar

1
2
3
4
5
6
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
  1. 在MyBatis全局配置文件中配置分页插件
1
2
3
4
<plugins>
<!--配置PageHelper分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
  1. 使用PageHelper提供的方法进行分页

  2. 可以使用更强大的PageInfo封装返回结果

3 .Page对象的使用

  1. 在查询之前通过PageHelper.startPage(页码,条数)设置分页信息,该方法返回Page对象
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
@Test
public void testPageHelper() throws IOException {
//设置MyBatis全局配置文件的路径
String resource = "mybatis-config.xml";
//读取类路径下的配置文件得到输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession对象,相当于Connection对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//获取Mapper代理对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//设置分页信息,每页显示3条记录,获取第1页
Page<Object> page = PageHelper.startPage(1, 3);
//获取所有员工
List<Employee> employees = mapper.getEmployees();
System.out.println("当前页是:"+page.getPageNum());
System.out.println("每页显示的条数是:"+page.getPageSize());
System.out.println("总页数是:"+page.getPages());
System.out.println("总记录数是:"+page.getTotal());
System.out.println("当前页中的记录有:");
for (Employee employee : employees) {
System.out.println(employee);
}
} finally {
//关闭sqlSession
sqlSession.close();
}
}

4 .PageInfo对象的使用

  1. 在查询完数据后,使用PageInfo对象封装查询结果,可以获取更详细的分页信息以及可以完成分页逻辑
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
37
38
39
40
41
42
43
44
45
46
@Test
public void testPageHelper() throws IOException {
//设置MyBatis全局配置文件的路径
String resource = "mybatis-config.xml";
//读取类路径下的配置文件得到输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession对象,相当于Connection对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//获取Mapper代理对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//设置分页信息
Page<Object> page = PageHelper.startPage(4, 2);
//获取所有员工
List<Employee> employees = mapper.getEmployees();
//创建PageInfo对象设置每页只显示5个页码
PageInfo<Employee> pageInfo = new PageInfo<>(employees, 5);
System.out.println("当前页是:"+pageInfo.getPageNum());
System.out.println("每页显示的条数是:"+pageInfo.getPageSize());
System.out.println("总页数是:"+pageInfo.getPages());
System.out.println("总记录数是:"+pageInfo.getTotal());
System.out.println("是否有上一页:"+pageInfo.isHasPreviousPage());
System.out.println("上一页是:"+pageInfo.getPrePage());
System.out.println("是否有下一页:"+pageInfo.isHasNextPage());
System.out.println("下一页是:"+pageInfo.getNextPage());
System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());
System.out.println("导航页的第一个页码是:"+pageInfo.getNavigateFirstPage());
System.out.println("导航页的最后一个页码是:"+pageInfo.getNavigateLastPage());
System.out.println("导航页的总页码是:"+pageInfo.getNavigatePages());
System.out.println("当前页中的记录有:");
for (Employee employee : employees) {
System.out.println(employee);
}
System.out.println("页码信息:");
int[] navigatepageNums = pageInfo.getNavigatepageNums();
for (int navigatepageNum : navigatepageNums) {
System.out.print(navigatepageNum+" ");
}
} finally {
//关闭sqlSession
sqlSession.close();
}
}