通用分页工具类PageUtils实现

1 篇文章 0 订阅
1 篇文章 0 订阅

概述

在实际javaweb项目开发过程中,常常需要使用到分页的功能,特别是针对不同数据表的分页可以说是一件很麻烦的事情,因此这里分享一个通用分页解决方案,该方案可以实现对任意数据表实现分页,使用简单,具体实现请继续阅读。

通用分页工具类(PageUtils)

package com.softeem.pagination.dto;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

/**
 * 通用分页工具类
 * @author mrchai
 *
 * @param <T>
 */
public class PageUtils<T> {

	/**
	 * 当前页码
	 */
	private int currentPage;
	/**
	 * 每页大小
	 */
	private int pageSize;
	/**
	 * 总数据条数
	 */
	private int totalNum;
	
	/**
	 * 首页
	 */
	private int first = 1;
	
	/**
	 * 尾页
	 */
	private int last;
	/**
	 * 总页数
	 */
	private int totalPage;
	
	/**
	 * 上一页
	 */
	private int prev;
	/**
	 * 下一页
	 */
	private int next;
	
	/**
	 * 页面序号显示的起始位置
	 */
	private int startNum;
	
	/**
	 * 页码显示控制-开始页码
	 */
	private int start;
	/**
	 * 页码显示控制-结束页码
	 */
	private int end;
	/**
	 * 显示页码控制-总显示页码(防止页码过多,页面显示拥挤问题)
	 */
	private int count = 10;
	
	/**
	 * 数据
	 */
	private List<T> list = new ArrayList<>();

	/**
	 * 在构造器中根据指定的参数,计算其他所有属性的属性值
	 * @param currentPage
	 * @param pageSize
	 * @param totalNum
	 */
	public PageUtils(int currentPage, int pageSize, int totalNum) {
		this.currentPage = currentPage;
		//赋值每天显示的记录条数
		this.pageSize = pageSize;
		//赋值总记录数(总数据条数)
		this.totalNum = totalNum;
		
		//计算获得总页数以及尾页
		this.totalPage = this.last = (int)Math.ceil((double)totalNum/pageSize);
		//防止当前页小于1
		this.currentPage = Math.max(this.currentPage, 1);
		//防止当前页超过总页数
		this.currentPage = Math.min(this.totalPage, this.currentPage);
		
		//设置上一页:上一页不能小于1
		this.prev = Math.max(this.currentPage - 1 , 1);
		//设置下一页:下一页不能超过总页数
		this.next = Math.min(this.currentPage + 1 , this.totalPage);
		
		//计算获取数据显示的序号位置
		this.startNum = (this.currentPage - 1) * pageSize;
		//计算显示页码的起始位置:起始位置不能小于1
		this.start = Math.max(this.currentPage - this.count/2 , 1);
		//计算显示页码的结束位置:结束位置不能超过总页数
		this.end = 	Math.min(this.start + this.count , this.totalPage);
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalNum() {
		return totalNum;
	}

	public void setTotalNum(int totalNum) {
		this.totalNum = totalNum;
	}

	public int getFirst() {
		return first;
	}

	public void setFirst(int first) {
		this.first = first;
	}

	public int getLast() {
		return last;
	}

	public void setLast(int last) {
		this.last = last;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getPrev() {
		return prev;
	}

	public void setPrev(int prev) {
		this.prev = prev;
	}

	public int getNext() {
		return next;
	}

	public void setNext(int next) {
		this.next = next;
	}

	public int getStartNum() {
		return startNum;
	}

	public void setStartNum(int startNum) {
		this.startNum = startNum;
	}

	public int getStart() {
		return start;
	}

	public void setStart(int start) {
		this.start = start;
	}

	public int getEnd() {
		return end;
	}

	public void setEnd(int end) {
		this.end = end;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}
	
	public String toString(){
		return JSON.toJSONString(this);
	}
	
}

使用如下(业务层解决方案)

package com.softeem.pagination.service;

import java.util.List;

import com.softeem.pagination.dao.DailyDAO;
import com.softeem.pagination.dto.Daily;
import com.softeem.pagination.dto.PageUtils;

public class DailyService {

	public PageUtils query(int currentPage,int pageSize){
		DailyDAO dao = new DailyDAO();
		//查总数据条数
		int totalNum = dao.findTotalNum();
		//根据提供的参数构建一个PageUtils对象
		PageUtils<Daily> pu = new PageUtils<>(currentPage, pageSize, totalNum);
		//查当前页数据
		List<Daily> list = dao.findByPage(pu.getCurrentPage(), pu.getPageSize());
		//将查询到的指定页码的数据存储到分页工具对象中
		pu.setList(list);
		//将分页工具对象返回
		return pu;
	}
}

使用时,只需在service层中获取需要查询的记录总数,并提供当前页码(currentPage)以及每页显示记录条数(pageSize),用于创建PageUtils对象,然后再讲PageUtils中的当前页和每页记录数获取后作为分页查询条件,调用DAO层实现,获取集合数据,最后将集合数据存储到PageUtils对象,并返回。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值