SpringBoot使用PageHelper分页插件

本文介绍如何在SpringBoot项目中使用PageHelper分页插件,包括配置依赖、设置分页参数及简单使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值