介绍
PageHelper是适用于MyBatis框架的一个分页插件。它利用MyBatis拦截器,在查询数据库时拦截SQL,并修改SQL以实现分页效果。
官方文档:https://pagehelper.github.io/
PageHelper使用
1、引入依赖
首先,你需要在项目的构建配置文件中导入PageHelper的依赖。如果你使用的是Maven项目,可以在pom.xml文件中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2、配置分页拦截器插件
创建MyBatisConfig文件,配置分页拦截器插件
@Configuration
public class MyBatisConfig {
@Bean
public PageInterceptor pageInterceptor(){
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}
3、代码使用
一旦配置完成,你就可以在代码中使用PageHelper了。通常在执行MyBatis的查询方法之前,你需要调用PageHelper的startPage方法,并传入页码和每页显示的记录数。例如:
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectByExample(example);
在上述代码中,pageNum是页码,pageSize是每页显示的记录数。调用startPage方法后,紧接着执行的MyBatis查询方法将会被分页。查询的结果会被封装在一个分页结果对象中,你可以通过该对象获取总页数、总记录数等信息。
代码示例:
@GetMapping("/selectList")
public PageInfo<User> select(){
//获取第1页的3条记录
PageHelper.startPage(1,3);
// 默认查询所有记录,PageHelper分页拦截器拦截,即在执行相关Sql之前会拦截自动加上limit 1,3
List<User> list = userService.list();
// 用PageInfo包装list
PageInfo<User> userPageInfo = new PageInfo<>(list);
return userPageInfo;
}
输出SQL日志:
==> Preparing: SELECT count(0) FROM user
==> Parameters:
<== Columns: count(0)
<== Row: 7
<== Total: 1
==> Preparing: SELECT id,name,age,email FROM user LIMIT ?
==> Parameters: 3(Integer)
<== Columns: id, name, age, email
<== Row: 1, Jone, 18, test1@baomidou.com
<== Row: 2, Jack, 20, test2@baomidou.com
<== Row: 3, Tom, 28, test3@baomidou.com
<== Total: 3
可以看到,先查询了表的记录,后查询记录并添加了limit SQL语句
分页结果与展示
用PageInfo包装对象获取到的分页信息
{
"total": 7,
"list": [
{
"id": 1,
"name": "Jone",
"age": 18,
"email": "test1@baomidou.com"
},
{
"id": 2,
"name": "Jack",
"age": 20,
"email": "test2@baomidou.com"
},
{
"id": 3,
"name": "Tom",
"age": 28,
"email": "test3@baomidou.com"
}
],
"pageNum": 1,
"pageSize": 3,
"size": 3,
"startRow": 1,
"endRow": 3,
"pages": 3,
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3
],
"navigateFirstPage": 1,
"navigateLastPage": 3
}