Java自制分页工具类
程序员文章站
2022-07-14 23:08:37
...
为什么不使用现有的分页插件
现在的分页工具非常的多,例如mybatis的pageHelper就是一款十分强大的工具。这里顺便记录一个以前踩过的坑,pageHleper只能分页在**PageHelper.startPage(pageNum,pageSize);**下的第一个第一个select语句!(有一次我想分页redis中读出的list一只分页不成功,弄了大半天看官网才发现这个分页工具只能分页第一个select语句)
![pageHelper官网截图](https://img-blog.csdnimg.cn/20200502135436108.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjM1NzQ1NA==,size_16,color_FFFFFF,t_70#pic_center)
所以我就想要不我就干脆仿照pageHelper写一个!
代码实现
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 自制分页工具类
*/
@Data // 这里的三个注解是使用了Lombok插件,节省了自己写getter和setter的时间
@AllArgsConstructor
@NoArgsConstructor
public class DiyPageInfo<T> {
// 当前页数
private int pageNum;
// 每页大小
private int pageSize;
// 当前页的数量
private int size;
// 一共有多少数据
private int total;
// 被分页后的数组
private List<T> list;
// 前一页
private int prePage;
// 后一页
private int nextPage;
// 一共多少页
private int navigateNums;
//所有导航页号
private int[] navigatepageNums;
// 如果只传入了一个list,将会默认从第一页开始分页(pageNum = 1)
public DiyPageInfo(List<T> inputlist){
this(1,inputlist);
}
// 默认每一页大小位 8 条数据
public DiyPageInfo(int pageNum, List<T> inputlist){
this(1,8,inputlist);
}
public DiyPageInfo(int pageNum, int pageSize, List<T> inputlist){
this.pageNum = pageNum;
this.pageSize = pageSize;
this.total = inputlist.size();
// 判断数据分页完之后是否整除
// 如果整除,将商作为分页后的总页数
if (inputlist.size() % pageSize == 0){
this.navigateNums = inputlist.size() / pageSize;
} else {
// 如果不整除,将商+1作为总页数
this.navigateNums = inputlist.size() / pageSize + 1;
}
// 分页的实现,将传入的数据进行切分
// subList的第二个参数是否比总数据量大
// 如果超过总数据量,则将总数据量作为subList的第二个参数
if (pageNum*pageSize < total ){
this.list = inputlist.subList( (pageNum-1)*pageSize , pageNum*pageSize);
} else {
this.list = inputlist.subList( (pageNum-1)*pageSize , total );
}
this.size = list.size();
this.prePage = pageNum -1;
this.nextPage = pageNum +1;
// 设置导航页
this.navigatepageNums = new int[navigateNums];
for (int i = 0; i < navigateNums; i++) {
this.navigatepageNums[i] = i+1;
}
}
}
如何使用?
只需要将你需要分页的list集合作为参数传入,就可以得到分页后的信息
DiyPageInfo<Route> pageInfo = new DiyPageInfo<>(pageNum, pageSize, routes);
// 传给前端
model.addAttribute("pageInfo",pageInfo);
这里获得的pageInfo就是分页之后的信息,如果想要得到其中某些参数,只需要使用 pageInfo.+参数名
例如想获得一个有总数据量 pageInfo.getTotal()
就可以了!
是不是很简单,快点上手使用吧!
上一篇: asp.net自制分页
下一篇: vue element自制分页器