这里简单记一下分页工具PageHelper的使用,使用可以直接从数据库中获取所有数据,而由其进行自动分页,节省开发时间
目录
添加依赖
首先我们需要在pom中添加咱们要使用的依赖
<!--pageHelper坐标-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
使用PageHelper
//开启分页查询 PageHelper
PageHelper.startPage(pageNum,pageSize);
PageHelper为我们提供了Page类来转换我们直接从数据库获取的信息
这边提供部分源码,感兴趣的可以自己去看
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.github.pagehelper;
import com.github.pagehelper.BoundSqlInterceptor.Chain;
import com.github.pagehelper.util.SqlSafeUtil;
import com.github.pagehelper.util.StackTraceUtil;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
public class Page<E> extends ArrayList<E> implements Closeable {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(Page.class);
private final String stackTrace;
private int pageNum;
private int pageSize;
private long startRow;
private long endRow;
private long total;
private int pages;
private boolean count;
private Boolean reasonable;
private Boolean pageSizeZero;
private String countColumn;
private String orderBy;
private boolean orderByOnly;
private BoundSqlInterceptor boundSqlInterceptor;
private transient Chain chain;
private String dialectClass;
private Boolean keepOrderBy;
private Boolean keepSubSelectOrderBy;
。。。
这里简单看一下它为我们提供的参数变量,最常用的是pageNum(页数),pageSize(页的大小),total(总数量), 以及getResult()获取我们这一页的数据。
通常情况下,我们可以建立一个类(类似PageBean)来保存我们从Page中获取到的信息
package com.yjzx.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean<T> {
private Long total;//总条数
private List<T> items;//当前页面数据集合
}
获取数据
我们需要将数据库数据List强制转换为Page
@Override
public PageBean<User> list(Integer pageNum, Integer pageSize, String username, String disabled) {
//1.创建PageBean对象
PageBean<User> pb=new PageBean<>();
//2.开启分页查询 PageHelper
PageHelper.startPage(pageNum,pageSize);
List<User> as=userMapper.list(username,disabled);
//Page中提供了方法,可以获取PageHelper分页查询后,得到的总记录条数和当前页数据
Page<User> p= (Page<User>) as;
//把数据填充到PageBean对象中
pb.setTotal(p.getTotal());
pb.setItems(p.getResult());
// System.out.println(pb);
return pb;
}
这时候返回的pb即为分页数据
这边提供前端使用(Vue)
const userList = async () => {
let params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
username: text.value ? text.value : null,
disabled: disabled.value ? disabled.value : null,
};
// console.log(params)
let result = await userListService(params);
console.log(result.data);
//渲染视图
//处理数据,给数据模型扩展一个属性categoryName,分类名称
total.value = result.data.total;
users.value = result.data.items;
console.log(users.value);
};
js:
//用户列表
export const userListService = (params) => {
console.log(params)
return request.get('/user/list', {params:params});
}
@GetMapping("/list")
public Result<PageBean<User>> list(
Integer pageNum,
Integer pageSize,
@RequestParam(required = false)String username,
@RequestParam(required = false)String disabled
){
System.out.println(username);
PageBean<User> pb=userService.list(pageNum,pageSize,username,disabled);
// System.out.println(title);
return Result.success(pb);
}