SpringBoot使用PageHelper分页插件
引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
yml设置分页插件参数
#分页配置
pagehelper:
#分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。
#配置时,可以使用下面的缩写值:
#oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
#特别注意:使用 SqlServer2012 数据库时,需要手动指定为sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。
helper-dialect: mysql
#分页合理化参数,默认值为false。
#当该参数设置为true时,pageNum<=0时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false时,直接根据参数进行查询。
reasonable: true
#支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面params配置的字段中取值,
#查找到合适的值时就会自动分页。
support-methods-arguments: true
#为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
#可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
#默认值为:pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
params: count=countSql
# 不常用参数
#默认值为false,该参数对使用RowBounds作为分页参数时有效。
#当该参数设置为true时,会将RowBounds中的offset参数当成pageNum使用,可以用页码和页面大小两个参数进行分页。
offset-as-page-num: false
#默认值为false,该参数对使用RowBounds作为分页参数时有效。
#当该参数设置为true时,使用RowBounds分页会进行 count 查询。
row-bounds-with-count: false
#默认值为false,当该参数设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果
#(相当于没有执行分页查询,但是返回结果仍然是Page类型)。
page-size-zero: false
#默认值为false。设置为true时,允许在运行时根据多数据源自动识别对应方言的分页
#(不支持自动选择sqlserver2012,只能使用sqlserver)。
auto-runtime-dialect: false
#默认值为true。当使用运行时动态数据源或没有设置helperDialect属性自动获取数据库类型时,会自动获取一个数据库连接,
#通过该属性来设置是否关闭获取的这个连接,默认true关闭,设置为false后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。
close-conn: true
简单使用
pagehelper插件已经帮我们处理了pageNum的问题,不需要自己去计算数据查询的开始下标。
public class StudentVO extends Student {
private int pageNum = 1;
private int pageSize = 5;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
PageHelper.startPage():只对第一条sql有效
public PageInfo<Student> list6(StudentVO studentVO) {
PageHelper.startPage(studentVO.getPageNum(), studentVO.getPageSize());
QueryExpressionDSL<SelectModel>.QueryExpressionWhereBuilder builder = select(StudentMapper.selectList)
.from(student)
.where();
if (studentVO.getName() != null && !"".equals(studentVO.getName())) {
builder.where(StudentDynamicSqlSupport.name, isLike("%" + name + "%"));
}
if (studentVO.getSex() != null && !"".equals(studentVO.getSex())) {
builder.and(sex, isEqualTo(studentVO.getSex()));
}
SelectStatementProvider select = builder.build()
.render(RenderingStrategies.MYBATIS3);
List<Student> students = studentMapper.selectMany(select);
PageInfo<Student> pageInfo = new PageInfo<>(students);
return pageInfo;
}
pageInfo.getTotal():获取一共多少条
测试
连接:localhost:9090/stu/list6?pageNum=3&pageSize=3
结果:
{
"total": 13,
"list": [
{
"id": 8,
"studentId": 56,
"name": "Java",
"age": 50,
"sex": "男",
"birthday": null
},
{
"id": 9,
"studentId": 78,
"name": "Linux",
"age": 40,
"sex": "男",
"birthday": null
},
{
"id": 10,
"studentId": 89,
"name": "Sql",
"age": 35,
"sex": "男",
"birthday": null
}
],
"pageNum": 3,
"pageSize": 3,
"size": 3,
"startRow": 7,
"endRow": 9,
"pages": 5,
"prePage": 2,
"nextPage": 4,
"isFirstPage": false,
"isLastPage": false,
"hasPreviousPage": true,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3,
4,
5
],
"navigateFirstPage": 1,
"navigateLastPage": 5
}