Java实现的分页功能

相信大家在学习Java的时候多多少少都接触过Java的分页功能,也自己写过一些简单的分页的工具类,下面给大家分享一下我自己编写的一个纯Java的分页工具类。(直接可用)

package cn.edu.imufe.exam.domain;

import lombok.Data;

import java.util.List;


@Data
public class Page<T> {

	/**
	 * 当前页是多少;
	 */
	private int pageNum;
	/**
	 * 每页显示的条数;
	 */
	private int pageSize;
	/**
	 * 总的记录条数。查询数据库得到的数据;
	 */
	private int totalRecord;
	/**
	 * 总页数,通过计算得到;
	 */
	private int totalPage;
	/**
	 * 开始索引,也就是从第几行开始拿数据,有了startIndex和pageSize,就知道了limit的两个参数了
	 */
	private int startIndex;
	/**
	 * 通过计算得到,分页显示的页数,
	 */
	private int start;
	
	private int end;
	/**
	 * 构造方法初始化对象;
	 */
	private List<T> list;

	/**
	 * 分页跳转url
	 */
	private String pageUrl;

	/**
	 * 分页初始化
	 * @param pageNum  用户要到的页数
	 * @param pageSize 每页显示的数据的条数
	 * @param totalRecord 总的记录数
	 * @param url 点击进行跳转时候的url ,不带参数
	 * @param data 模糊查询等问题的参数(条件参数)
	 */
	public Page(int pageNum,int pageSize,int totalRecord,String url,String data) {
		this.pageNum = pageNum;
		this.pageSize = pageSize;
		this.totalRecord = totalRecord;
		String pageHtml = "";
		if(totalRecord != 0){
			//totalPage计算总页数
			if(totalRecord%pageSize==0) {
				//整除的情况下就不需要进行多余的分页;
				this.totalPage = totalRecord/pageSize;
			}else {
				//不整除的情况下多加一页;
				this.totalPage = (totalRecord/pageSize)+1;
			}
			//计算开始的索引;
			this.startIndex = (pageNum-1)*pageSize;

			this.start = 1;
			this.end = 5;


			//显示页数的算法
			if(totalPage<=5) {
				this.end = this.totalPage;
			}else {
				//总页数大于6
				this.start = pageNum-2;
				this.end = pageNum+2;

				if(start<0) {
					//排除为第一页和第二页的情况
					this.start = 1;
					this.end = 5;
				}
				if(end > this.totalPage) {
					this.end = totalPage;
					this.start = end - 5;
				}
			}

			pageHtml += "共"+this.totalPage+"页数据 当前第" + pageNum + "页 ";
			//首页
			if ("".equals(data)){
				pageHtml += " <a href=\""+url+"?pageNum=1\"> 首页 </a>";
			}else{
				pageHtml += " <a href=\""+url+"?pageNum=1&data="+data+"\"> 首页 </a>";
			}
			//
			//如果当前为第一页就没有上一页这个超链接
			if(pageNum == 1){
				for (int i=this.start;i<=this.end;i++){
					//当前页不显示超链接
					if (pageNum == i){
						pageHtml += " " + i + " ";
					}else if (pageNum != i){
						if ("".equals(data)){
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"\"> "+i+" </a>" +" ";
						}else{
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"&data="+data+"\"> "+i+" </a>" +" ";
						}

					}
				}
				if (pageNum != this.totalPage){
					if ("".equals(data)){
						pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum+1)+"\"> 下一页> </a>" + " ";
					}else{
						pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum+1)+"&data="+data+"\"> 下一页> </a>" + " ";
					}

				}
			}
			//不是第一页也不是最后一页
			if(pageNum > 1 && pageNum <this.totalPage){
				if ("".equals(data)){
					pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum-1)+"\"> <上一页 </a>" + " ";
				}else{
					pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum-1)+"&data="+data+"\"> <上一页 </a>" + " ";
				}

				for (int i=this.start;i<=this.end;i++){
					//当前页不显示超链接
					if (pageNum == i){
						pageHtml += " " + i + " ";
					}else if (pageNum != i){
						if ("".equals(data)){
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"\"> "+i+" </a>" +" ";
						}else{
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"&data="+data+"\"> "+i+" </a>" +" ";
						}

					}
				}
				if (pageNum != this.totalPage){
					if ("".equals(data)){
						pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum+1)+"\"> 下一页> </a>" + " ";
					}else{
						pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum+1)+"&date="+data+"\"> 下一页> </a>" + " ";
					}

				}
			}
			//如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有
			if(pageNum != 1 && pageNum == this.totalPage){
				if ("".equals(data)){
					pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum-1)+"\"> <上一页 </a>" + " ";
				}else{
					pageHtml += " " + "<a href=\""+url+"?pageNum="+(pageNum-1)+"&data="+data+"\"> <上一页 </a>" + " ";
				}

				for (int i=this.start;i<=this.end;i++){
					//当前页不显示超链接
					if (pageNum == i){
						pageHtml += " " + i + " ";
					}else if (pageNum != i){
						if ("".equals(data)){
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"\"> "+i+" </a>" +" ";
						}else{
							pageHtml += " " + "<a href=\""+url+"?pageNum="+i+"&data="+data+"\"> "+i+" </a>" +" ";
						}
					}
				}
			}
			//尾页
			pageHtml += " " + "<a href=\""+url+"?pageNum="+(this.totalPage)+"&data="+data+"\"> 尾页 </a>" + " ";
			this.pageUrl = pageHtml;
		}else if (totalRecord == 0){
			pageHtml += "共1页数据 当前第1页 ";
			//首页
			if ("".equals(data)){
				pageHtml += " <a href=\""+url+"?pageNum=1\"> 首页 </a>";
				pageHtml += " " + "<a href=\""+url+"?pageNum=1\"> 尾页 </a>" + " ";
			}else{
				pageHtml += " <a href=\""+url+"?pageNum=1&data="+data+"\"> 首页 </a>";
				pageHtml += " " + "<a href=\""+url+"?pageNum=1&data="+data+"\"> 尾页 </a>" + " ";
			}
			//尾页

			this.pageUrl = pageHtml;
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值