SpringBoot整合PageHelper(分页插件)
PageHelper分页插件
可以在正常的查询业务中,只需要加上一行代码就可以实现分页的数据的封装处理
一:实现原理
PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数(pageIndex,pageSize),之后在查询执行的时候,获取当前线程中的分页参数,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在finally语句中清除ThreadLocal中的查询参数
二:使用方法
- 在查询所有的service中调用PageHelper方法:PageHelper.startPage(pageNum,pageSize)
- MyBatis查询方法
注意:只要保证在PageHelper方法调用后紧跟Mybatis查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocl存储的对象
SpringBoot整合PageHelper
- 引入PageHelper依赖
<!--引入分页插件pagehelper依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
- 在查询所有的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对象的区别:
- 两者都能获取数据
- Page是一个ArrayList ;PageInfo是一个对象,能获取到的数据比Page多