SpringBoot整合PageHelper

SpringBoot整合PageHelper(分页插件)

PageHelper分页插件

可以在正常的查询业务中,只需要加上一行代码就可以实现分页的数据的封装处理
一:实现原理
PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数(pageIndex,pageSize),之后在查询执行的时候,获取当前线程中的分页参数,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在finally语句中清除ThreadLocal中的查询参数
二:使用方法

  1. 在查询所有的service中调用PageHelper方法:PageHelper.startPage(pageNum,pageSize)
  2. MyBatis查询方法

注意:只要保证在PageHelper方法调用后紧跟Mybatis查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocl存储的对象

SpringBoot整合PageHelper

  1. 引入PageHelper依赖
<!--引入分页插件pagehelper依赖-->
         <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>
  1. 在查询所有的service方法中写 PageHelper.startPage(pageNum,pageSize);
@Override
    public List<User> AllfindPage(Integer pageNum, Integer pageSize) {
        //实现分页的代码
        Page<User> page=PageHelper.startPage(pageNum,pageSize);
        //执行查询所有的方法
        List<User> userList= userDao.selectALl();
        //将返回的数据封装到PageInfo对象中方法一:(页码 页大小 当前页数据 页总数  总记录数)
        PageInfo<User> pi=new PageInfo<>(userList);
        
		//方法二:
		System.out.println("当前页:"+page.getPageNum());
        System.out.println("总页数:"+page.getPages());
        System.out.println("页大小:"+page.getPageSize());
        System.out.println("总记录数:"+page.getTotal());
        System.out.println("当前页数据(查询的集合):"+page.getResult());
        //将返回的数据存入自定义的Page对象中(需要自己创建Page实体)
        //将返回的数据存入传统的PageUtil工具类中
        PageUtil page1=new PageUtil(page.getTotal(),page.getPageSize(),page.getPages(),page.getPageNum(),page.getResult());
        return userList;
    }

分页的工具类

package com.zuxia.util;

import com.zuxia.entity.User;

import java.util.List;

public class PageUtil {
    //一共有多少条数据
    private Integer datacount;
    //每页显示多少条数据
    private Integer showdata;
    //一共分多少页
    private Integer pagecount;
    //当前页是第几页
    private Integer pageindex;
    //当前页面显示的集合信息
    private List<User> list;
    
  public Integer getPagecount() {
       return this.datacount%this.showdata==0?this.datacount/this.showdata:this.datacount/this.showdata+1;
    }

     public void setPagecount(Integer pagecount) {
        this.pagecount = pagecount;
    } 

    public PageUtil(long total, int pageSize, int pages, int pageNum, List<User> result) {
    }

    public Integer getDatacount() {
        return datacount;
    }

    public void setDatacount(Integer datacount) {
        this.datacount = datacount;
    }

    public Integer getShowdata() {
        return showdata;
    }

    public void setShowdata(Integer showdata) {
        this.showdata = showdata;
    }

    public Integer getPageindex() {
        return pageindex;
    }

    public void setPageindex(Integer pageindex) {
        this.pageindex = pageindex;
    }

    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }
}

PageInfo和Page对象的区别:

  1. 两者都能获取数据
  2. Page是一个ArrayList ;PageInfo是一个对象,能获取到的数据比Page多
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值