数据库分页之前之后的处理

/**
 * @author sunbai email:[email protected]
 * @date   2012-1-14 && 上午11:01:40
 */
package com.gangyi.util;
import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Scope;

import com.gangyi.crm.vo.PageVo;


/**
 * 分页算法处理类
 * @author sunbai email:[email protected]
 * @date   2012-1-14 && 上午11:01:40
 */
@Scope("prototype")
public class PageUtil {
	//每页行数
	private int rows;
	//分页查询起始序列
	private int limit;
	//首页A标签
	private String fistPageHtml;
	//上一页A标签
	private String upPageHtml;
	//下一页A标签
	private String nextPageHtml;
	//末页A标签
	private String lastPageHtml;
	//总记录数
	private int recordCount;
	//总页数
	private int allPage;
	//当前页
	private int currPage;
	// 分页带页码 ,最大页签显示数
	private final int CUTPAGE_MAX_PAGE = 6;
	// 分页带页码,多少页进行折叠
	private final int CUTPAGE_LOOP_PAGE = 3;
	
	private void setRows(int rows) {
		this.rows = rows;
	}
	private void setLimit(int limit) {
		this.limit = limit;
	}
	private void setFistPageHtml(String fistPageHtml) {
		this.fistPageHtml = fistPageHtml;
	}
	private void setUpPageHtml(String upPageHtml) {
		this.upPageHtml = upPageHtml;
	}
	private void setNextPageHtml(String nextPageHtml) {
		this.nextPageHtml = nextPageHtml;
	}
	private void setLastPageHtml(String lastPageHtml) {
		this.lastPageHtml = lastPageHtml;
	}
	private void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}
	private void setAllPage(int allPage) {
		this.allPage = allPage;
	}
	private void setCurrPage(int currPage) {
		this.currPage = currPage;
	}
	/**
	 * 获得每页行数
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:53:50
	 * @return
	 */
	public int getRows() {
		return rows;
	}
	/**
	 * 获得其实页序列
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:54:01
	 * @return
	 */
	public int getLimit() {
		return limit;
	}
	/**
	 * 获得首页a标签
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:57:21
	 * @return
	 */
	public String getFistPageHtml() {
		return fistPageHtml;
	}
	/**
	 * 获得上一页a标签
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:57:32
	 * @return
	 */
	public String getUpPageHtml() {
		return upPageHtml;
	}
	/**
	 * 获得下一页a标签
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:57:44
	 * @return
	 */
	public String getNextPageHtml() {
		return nextPageHtml;
	}
	/**
	 * 获得末页a标签
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:57:55
	 * @return
	 */
	public String getLastPageHtml() {
		return lastPageHtml;
	}
	/**
	 * 获得总数据记录数
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:58:15
	 * @return
	 */
	public int getRecordCount() {
		return recordCount;
	}
	/**
	 * 获得总页数
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:58:25
	 * @return
	 */
	public int getAllPage() {
		return allPage;
	}
	/**
	 * 获得当前页
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:59:00
	 * @return
	 */
	public int getCurrPage() {
		return currPage;
	}
	/**
	 * 传入需要的页码,和每页显示的行数算出mysql中分页的开始偏移数据,方便输入到sql语句中查询
	 * 如getLimtAndLines(10,10)
	 * 返回map
	 * map.get("limit") 等于90
	 * map.ger("rows") 等于10
	 * 那么在sql语句中即是:select * from table limit 90,10
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 上午11:06:34
	 * @param page 当前页
	 * @param lines 每页行数
	 * @return
	 */
	public Boolean getLimtAndLines(int page,int lines){
		try
        {
			if(page < 1){
				page = 1;
			}
			if(lines < 1){
				lines = 15;
			}
			this.setLimit((page - 1) * lines);
			this.setRows(lines);
        }
        catch (Exception e)
        {
        	return false;
        }

		
		return true;
	}
	/**
	 * 生成页面分页代码主方法
	 * 根据总条数,以及ACTION路径、当前页和每页显示行数,计算出上一页,下一页等数据,并生成HTML中的A标签或者数字供前台调用
	 * 返回值是true 或  false
	 * 当为false时 代表没有数据,也无需进行计算,页面直接判断是否为NULL显示与否即可
	 * 其余方法下取值如下
	 * PageUtil.getFistPageHtml() 获取首页标签
	 * PageUtil.getUpPageHtml() 获取上一页标签
	 * PageUtil.getNextPageHtml() 获取下一页标签
	 * PageUtil.getLastPageHtml() 获取末页标签
	 * PageUtil.getRecordCount() 获取总记录数
	 * PageUtil.getAllPage() 获取总页数
	 * PageUtil.getCurrPage() 获取当前页
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午02:56:14
	 * @param allCount 总记录数
	 * @param actionUrl ACTION路径
	 * @param lines	每页行数
	 * @param page 第几页
	 * @return
	 */
	public Boolean getPageHtml(int allCount,String actionUrl,int lines,int page){
		try{
			//判断是否有记录
			if( allCount == 0){
				return false;
			}
			//判断当前页数
			if( page < 1){
				page = 1;
			}
			//总记录数
			int recordCount = allCount;
			//总页数
			int allPage = recordCount % lines == 0 ? recordCount / lines : recordCount / lines + 1;
			//当前页
			int currPage = page;
			//首页
			int firstPage = 1;
			//末页
			int lastPage = allPage;
			//上一页
			int upPage = currPage - 1;
			//下一页
			int nextPage = currPage + 1;
			//设置分页VO对象
			PageVo pageVo = new PageVo();
			pageVo.setRecordCount(recordCount);
			pageVo.setAllPage(allPage);
			pageVo.setCurrPage(currPage);
			pageVo.setFirstPage(firstPage);
			pageVo.setLastPage(allPage);
			pageVo.setUpPage(upPage > firstPage ? upPage : firstPage);
			pageVo.setNextPage(nextPage < lastPage ? nextPage : lastPage);
			//调用生成页面的方法
			this.toHtmlFromPageMap(pageVo,actionUrl);
		}catch (Exception e) {
			return false;
		}
		return true;
		
	}
	/**
	 * 生成页面分页代码,供主方法调用
	 * 根据分页VO以及ACTION路径、生成HTML中的A标签或者数字供前台调用
	 * 其取值如下
	 * PageUtil.getFistPageHtml() 获取首页标签
	 * PageUtil.getUpPageHtml() 获取上一页标签
	 * PageUtil.getNextPageHtml() 获取下一页标签
	 * PageUtil.getLastPageHtml() 获取末页标签
	 * PageUtil.getRecordCount() 获取总记录数
	 * PageUtil.getAllPage() 获取总页数
	 * PageUtil.getCurrPage() 获取当前页
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午03:04:25
	 * @param pageVo 分页VO
	 * @param actionUrl ACTION路径
	 * @return
	 */
	private void toHtmlFromPageMap(PageVo pageVo,String actionUrl){
		this.setFistPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getFirstPage()+">首页</a>");
		this.setUpPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getUpPage()+">上一页</a>");
		this.setNextPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getNextPage()+">下一页</a>");
		this.setLastPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getLastPage()+">末页</a>");
		//总记录数
		this.setRecordCount(pageVo.getRecordCount());
		//总页数
		this.setAllPage(pageVo.getAllPage());
		//当前页
		this.setCurrPage(pageVo.getCurrPage());
	}
	/**
	 * 根据总页数获得当前页面page页码集合
	 * @author sunbai email:[email protected]
	 * @date   2012-1-14 && 下午04:16:51
	 * @param allpage 总页数
	 * @param currpage	当前页
	 * @return
	 */
	public List<String> getPageNumbersList(int allpage, int currpage) {
		// pageye 存放页面,页码集合
		List<String> pageye = new ArrayList<String>();
		// 需要展示的标签页数小于展示页数常量
		if (allpage <= CUTPAGE_MAX_PAGE)
			for (int i = 1; i <= allpage; i++)
				pageye.add(String.valueOf(i));
		// 需要展示的标签页数大于展示页数常量
		if (allpage > CUTPAGE_MAX_PAGE) {
			// 当前页小于展示也数常量
			if (currpage <=  CUTPAGE_LOOP_PAGE)
				for (int i = 1; i <= CUTPAGE_MAX_PAGE; i++)

					pageye.add(String.valueOf(i));
			// 当前页大于展示也数常量
			if (currpage >  CUTPAGE_LOOP_PAGE)
				for (int i = currpage - CUTPAGE_LOOP_PAGE; i <= (currpage
						+ CUTPAGE_LOOP_PAGE - 1 > allpage ? allpage : currpage
						+ CUTPAGE_LOOP_PAGE - 1); i++)
					pageye.add(String.valueOf(i));
		}
		return pageye;
	}
}

你可能感兴趣的:(数据库)