pageHelper就是mybatis拦截器的一个应用,实现分页查询,支持常见的 12 种数据库的物理分页并支持多种分页方式。
使用PageHelper的好处是在实际项目开发中更方便。
原因是:在项目中我们执行一个分页查询时,很多时候还会需要知道该查询的其他信息,如总数、每页数量、当前页数、上一页或下一页等等,这些信息如果每次都自己写的话就太麻烦了,而pagehelper能够帮助我们更方便地获取这些信息,大大方便了我们的开发效率。
添加依赖
pom.xml 文件
注意导入的依赖是spring版本的而不是其独立版本,否则pagehelper将不起作用
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
<scope>compile</scope>
</dependency>
配置分页插件
在MyBatis的核心配置文件中配置插件,或者是springboot项目在springboot配置文件(applicable.yml)中声明插件
<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
#pagehelper分页插件配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
使用pageHelper实现分页功能
1、在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)
开启分页功能
pageNum:当前页的页码
pageSize:每页显示的条数
2、在查询功能获取list集合之后获取分页相关信息PageInfo page = new PageInfo<>(list, 5)
;
list表示分页数据;5表示当前导航分页的数量
实例:
PageHelper.startPage(pageNo, pageSize);
List<User> userList = userMapper.selectByTnId(tenantId);
注意:只有紧跟着PageHelper.startPage(pageNum,pageSize)的sql语句才被pagehelper起作用
常用的数据:
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]
实际使用
controller,前端传pageno和pagesize,一个是当前的页码,一个是每页显示的条数。
@GetMapping("/user/tenantid/{tenantid}/pageno/{pageno}/pagesize/{pagesize}")
@ResponseBody
@ApiOperation("点击用户管理,显示规定行")
@ApiImplicitParams({
@ApiImplicitParam(name = "tenantid", value = "租户id", dataType = "String", required = true),
@ApiImplicitParam(name = "pageno", value = "页码", dataType = "int", required = true, example = "1"),
@ApiImplicitParam(name = "pagesize", value = "每页记录数", dataType = "int", required = true, example = "10")
})
public CommonResult getByTenantId(@PathVariable("tenantid") String tenantId,
@PathVariable("pageno") Integer pageno,
@PathVariable("pagesize") Integer pagesize) {
PageInfo<User> user = userService.getByTenantId(tenantId, pageno, pagesize);
if (user == null) {
return CommonResult.build(CommonResult.RESULE_DATA_NONE, CommonResult.RETURN_DATA_TEXT);
} else {
return CommonResult.success(CommonResult.SELECT_SUCCESS_TEXT, user);
}
}
service,使用pageInfo来接收查询出来的数据
@Override
public PageInfo<User> getByTenantId(String tenantId, int pageNo, int pageSize) {
PageHelper.startPage(pageNo, pageSize);
List<User> userList = userMapper.selectByTnId(tenantId);
return new PageInfo<>(userList);
}