PageHelper后端分页插件

  • 一、导入依赖
  • 二、分页代码逻辑
  • 三、分页接口


前言

PageHelper是mybatis一个后端分页插件,可以用它实现后端分页,简化代码。


一、导入依赖

<!-- 
	单独使用的时候:
    PageHelper支持的常见的12种关系型数据库,在编写SQL的时候不会手动写limit关键字,所以代码可以移植
    Github项目地址: https://github.com/pagehelper/Mybatis-PageHelper
-->	
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>4.1.0</version>
</dependency>

<!-- 在SpringBoot项目中使用-->
<!-- pagehelper分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.10</version>
</dependency>

二、分页逻辑代码

//原生的写法:1.先查询总页数  2.再根据分页的信息查询当前页的数据
//PageHelper的写法:开启分页
PageHelper.startPage(当前页,每页显示的条数);
//分页查询:只要开启了分页,它会帮助我们做什么事情?
//1.先查询总数量  //2.根据application.yml中驱动名自动实现分页,如果是mysql就用limit
//3.自动计算limit的第一个值:limit a,b [a = 当前页的起始下标 = (当前页-1)*每页显示的条数]
List<Emp> emps = empMapper.pageQuery(empQuery);

三、分页接口

//分页查询 + 高级查询
@PostMapping
public PageInfo<SysUser> queryPage(@RequestBody SysUserQuery sysUserQuery){
    List<SysUser> sysUsers = sysUserService.queryPage(sysUserQuery);
    return new PageInfo<>(sysUsers);
}

 PageInfo的源码:

public class PageInfo<T> extends PageSerializable<T> {
    private int pageNum;
    private int pageSize;
    private int size;
    private int startRow;
    private int endRow;
    private int pages;
    private int prePage;
    private int nextPage;
    private boolean isFirstPage;
    private boolean isLastPage;
    private boolean hasPreviousPage;
    private boolean hasNextPage;
    private int navigatePages;
    private int[] navigatepageNums;
    private int navigateFirstPage;
    private int navigateLastPage;

    public PageInfo() {
        this.isFirstPage = false;
        this.isLastPage = false;
        this.hasPreviousPage = false;
        this.hasNextPage = false;
    }

    public PageInfo(List<T> list) {
        this(list, 8);
    }

    public PageInfo(List<T> list, int navigatePages) {
        super(list);
        this.isFirstPage = false;
        this.isLastPage = false;
        this.hasPreviousPage = false;
        this.hasNextPage = false;
        if (list instanceof Page) {
            Page page = (Page)list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.pages = page.getPages();
            this.size = page.size();
            if (this.size == 0) {
                this.startRow = 0;
                this.endRow = 0;
            } else {
                this.startRow = page.getStartRow() + 1;
                this.endRow = this.startRow - 1 + this.size;
            }
        } else if (list instanceof Collection) {
            this.pageNum = 1;
            this.pageSize = list.size();
            this.pages = this.pageSize > 0 ? 1 : 0;
            this.size = list.size();
            this.startRow = 0;
            this.endRow = list.size() > 0 ? list.size() - 1 : 0;
        }

        if (list instanceof Collection) {
            this.navigatePages = navigatePages;
            this.calcNavigatepageNums();
            this.calcPage();
            this.judgePageBoudary();
        }

    }
    //其他方法略......
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值