分页查询
分页查询是日常开发中比较常用的功能。MyBatis框架下也有很多插件实现分页功能,比如pageHelper。这是一款非常简单、易用的分页插件,能很好地集成在Spring Boot中。pageHelper是一款基于MyBatis的数据库分页插件,所以我们在使用它时需要使用MyBatis作为持久层框架。下面通过示例演示pageHelper实现分页查询。
1.添加pageHelper依赖
修改pom.xml文件,添加pageHelper依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
pageHelper提供了针对Spring Boot框架的依赖库pagehelper-spring-boot-starter,对于Spring Boot项目可以使用pagehelper-spring-boot-starter组件。
2.增加pageHelper配置
在application.properties中增加pageHelper配置。
# 分页框架
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
上面的示例是pageHelper分页框架的初始配置,主要用于指定数据库类型。
- helperDialect:指定数据库类型,可以不配置,pageHelper插件会自动检测数据库的类型。
- reasonable:分页合理化参数,默认为false,当该参数设置为true时,当pageNum≤0时,默认显示第一页,当pageNum超过pageSize时,显示最后一页。
- supportMethodsArguments:分页插件会根据查询方法的参数,自动在params配置的字段中取值,找到合适的值会自动分页。
- params:用于从对象中根据属性名取值,可以配置pageNum、pageSize,count不用配置映射的默认值。
3.调用测试
增加单元测试方法,验证分页功能是否生效。示例代码如下:
@Test
public void testSelectListPaged() {
PageHelper.startPage(1,5);
List<Student> students = studentMapper.selectAll();
PageInfo<Student> pageInfo = new PageInfo<Student>(students);
System.out.println("总页数:"+pageInfo.getPages()+",总条数:"+pageInfo.getTotal()+",当前页:"+pageInfo.getPageNum());
for (Student stu : students) {
System.out.println("name:"+stu.getName()+",age:"+stu.getAge());
}
}
在上面的示例中,分页的核心只有一行代码,PageHelper.startPage(page,pageSize);就标识开始分页。添加此行代码之后,pageHelper插件会通过其内部的拦截器将执行的SQL语句转化为分页的SQL语句。
单击Run Test或在方法上右击,选择Run ‘testSelectListPaged’,查看单元测试结果,运行结果如图所示。
结果表明单元测试方法运行成功,控制台输出了当前页的数据列表、总页数、数据总条数和当前页。这说明使用pageHelper插件成功实现了分页功能。
使用时PageHelper.startPage(pageNum, pageSize)一定要放在列表查询的方法中,这样在查询时会查出相应的数据量以及总数。