zoukankan      html  css  js  c++  java
  • Java中分页功能源码实例

    一、源码(后附使用说明)
    package com.zhiyou100.crm.util;
    /**
     * 分页功能
     * @author YangXianSheng
     *
     */
    public class Pager {
    	
    	//当前页码
    	int pageNo;      //传过来
    	//每页数据条数
    	int pageSize;    //传过来
    	//总数据条数 
    	int total;       //传出来
    	//总页数
    	int pageCount;   //算过来
    	//最多页码数
    	int showPageNos;  //传出来
    	//起始页码
    	int start;     //算出来
    	//结束页码
    	int end;       //算出来
    	
    	/**
    	 * 分页类
    	 * @param pageNo  当前页码
    	 * @param total   总数据条数
    	 * @param pageSize  每页数据条数
    	 * @param showPageNos  最多显示的页码数
    	 */
    	public Pager(int pageNo, int total, int pageSize, int showPageNos) {
    		this.pageNo = pageNo;
    		this.total = total;
    		this.pageSize = pageSize;
    		this.showPageNos = showPageNos;
    		valid();
    		calc();
    	}
    	
    	/**
    	 * 分页类
    	 * @param pageNo 当前页码
    	 * @param total  总数据条数
    	 */
    	public Pager(int pageNo, int total) {
    		//在构造方法中通过this()调用其他构造方法
    		this(pageNo,total,5,3);
    	}
       
    
    	
    	/**
    	 * 实现计算的方法
    	 */
    	private void calc() {
    		
    		pageCount=total%pageSize==0 ? total/pageSize : total/pageSize+1;
    	
    		//检查pageNo
    		if(pageNo>pageCount) pageNo = pageCount;
    
    		//计算start、end
    		start = end =pageNo;
    		while (end-start+1 < showPageNos && (start >1 || end <pageCount) ) {
    			if (start>1) start--;
    			if(end <pageCount) end++; 
    		}
    	
    	}
    
    
    
    	@Override
    	public String toString() {
    		return "Pager [pageNo=" + pageNo + ", pageSize=" + pageSize + ", total=" + total + ", pageCount=" + pageCount
    				+ ", showPageNos=" + showPageNos + ", start=" + start + ", end=" + end + "]";
    	}
    
    
    	public static void main(String[] args) {
    		
    		Pager pager =new Pager(16, 1000);
    		System.out.println(pager);
    		
    		Pager pager2 =new Pager(3, 1003);
    		System.out.println(pager2);
    		
    	}
    	
    
    	private void valid() {
    	    	if(pageNo<1) throw new PagerException("pageNo",1);
    	    	if(pageSize<1) throw new PagerException("pageSize",1);
    	    	if(total<0) throw new PagerException("total",1);
    	    	if(showPageNos<1) throw new PagerException("showPageNos",1);
    	    	
    	    	if(total ==0)System.err.println("警告:数据总条数为0!");
    			
    		}
    
    	public class PagerException extends RuntimeException{
    		
    		private static final long serialVersionUID = 1L;
    
    		public PagerException(String property,int minValue) {
    			super(String.format("分页参数%S不能小于%d。", property,minValue));
    		}
    	}
    	
    	/**
    	 * 获取当前页码
    	 * @return  当前页码
    	 */
    	 public int getPageNo() {
    		return pageNo;
    	}
    
    	 /**
    	  * 获取每页数据条数
    	  * @return 每页数据条数
    	  */
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	/**
    	 * 获取数据总条数
    	 * @return  数据总条数
    	 */
    	public int getTotal() {
    		return total;
    	}
    
    	/**
    	 * 获取数据总页数
    	 * @return  数据总页数
    	 */
    	public int getPageCount() {
    		return pageCount;
    	}
    
    	/**
    	 * 获取最多显示页码数
    	 * @return  最多显示页码数
    	 */
    	public int getShowPageNos() {
    		return showPageNos;
    	}
    
    	/**
    	 * 获取起始页码
    	 * @return 起始页码
    	 */
    	public int getStart() {
    		return start;
    	}
    
    	/**
    	 * 获取结束页码
    	 * @return 结束页码
    	 */
    	public int getEnd() {
    		return end;
    	}
    
    
    }
    
    
    


    二、使用说明:本案例是在Eclipse环境中测试运行,首先将包名进行修改成自己的包名,其次建立的时候将类命名为Pager

    三、Pager类的设计

       Pager类的职责: 根据pageNototalpageSizeshowPageNos计算pageCountstartend

       这些数据用来支持在页面上显示分页信息和页码:

    如下所示:

       123条数据,第3/13页                   1  2  3  4  5  6  7  8  9

    区分哪些数据时传过来的,哪些数据是算出来的

    将传过来的数据当做构造方法的参数

    根据参数的变化频率调整参数的位置(Eclipse重构功能支持)

    将变化频率高的参数放

    四、数据分页的必要性

    1.一次性把所有数据(如果很多的话)从数据库中查出来回给数据带来很大的IO开销,而IO是最慢的操作,结果是数据库并发了大大降低!

     

    2.一次性把大量的数据从数据库传到应用服务器,再从应用服务器传到用户浏览器会大大占用服务器宝贵的带宽资源,导致服务器能够处理请求大大减少!

     

    3.查询和传送大量数据需要时间必然很长,结果导致页面反应速度变慢

    用户体验变差

     

    4.人类可读的数据不超过几十条,传送成百上千条数据没有意义

     

    分页数据的查询

         pageNo  页码(从1开始)

         pageSize 每页条数(默认10条)

     

         能够计算出来任意pageNo对应的数据的起始索引位置

         start =(pageNo-1)*pageSize    -----起始索引位置

         count = pageSize             -----数据条数




  • 相关阅读:
    Spring Boot笔记一 输出hello
    Java Web之表单重复提交问题
    Java Web之验证码
    Java Web之下载文件
    Java工具之上传文件
    Java Web之上传文件
    Java Web之EL
    Java Bean的规范
    Java Web之JSP
    《FPGA全程进阶---实战演练》第一章之如何学习FPGA
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860037.html
Copyright © 2011-2022 走看看