欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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() 就可以了!

是不是很简单,快点上手使用吧!

相关标签: java