1. 程式人生 > >springmvc 分頁查詢的簡單實現

springmvc 分頁查詢的簡單實現

package com.cm.contract.common;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;



/**分頁類
 * @author FENGWEI
 * @date 2016-5-23
 */
public class Page implements java.io.Serializable{
	
	private static final long serialVersionUID = 1L;
	//前一頁
	private Boolean hasPrePage;
	//後一頁
	private Boolean hasNextPage;
	//每頁顯示多少條:預設20條
	private Long everyPage = 20L;
	//總頁數
	private Long totalPage;
	//當前第多少頁:預設第1頁
	private Long currentPage = 1L;
	//開始下標
	private Long beginIndex;
	//結束下標
	private Long endinIndex;
	//總共多少條
	private Long totalCount;	
	//排序列名
	private String sortName;	
	//排序狀態
	private String sortState;	
	//排序資訊
	private String sortInfo;
	//是否排序
	private Boolean sort = false;
	private String defaultInfo = "  ";
	
	
	
	public String getDefaultInfo() {
		return defaultInfo;
	}

	public void setDefaultInfo(String defaultInfo) {
		this.defaultInfo = defaultInfo;
	}

	public String getSortInfo() {
		return sortInfo;
	}

	public void setSortInfo(String sortInfo) {
		this.sortInfo = sortInfo;
	}

	public String getSortName() {
		return sortName;
	}

	public void setSortName(String sortName) {
		setPageSortState(sortName);		
	}

	public String getSortState() {
		return sortState;
	}

	public void setSortState(String sortState) {
		this.sortState = sortState;
	}

	
	public Page() {
	}

	/**
	 * 常用,用於計算分頁
	 * */
	public Page(Long totalRecords){		
		this.totalCount = totalRecords;
		setTotalPage(getTotalPage(totalRecords));     
	}
	
	/**
	 * 設定每頁顯示多少條時使用
	 * */
	public Page(Long everyPage,Long totalRecords){	
		this.everyPage = everyPage;
		this.totalCount = totalRecords;
		setTotalPage(getTotalPage(totalRecords));     
	}
	
	/**
	 * @param state   狀態碼
	 * @param value   到第多少頁或者設定每頁顯示多少條或者為排序列名
	 */
	public void pageState(int  index,String value) {				
		sort = false;
		switch (index) {
		case 0 :setEveryPage(Long.parseLong(value));break;
		case 1 :first();break;
		case 2:	previous();break;
		case 3:	next();break;
		case 4: last();break;
		case 5: sort = true;sort(value);break;
		case 6 ://到指定第多少頁
			setCurrentPage(Long.parseLong(value));
			break;			
		}
	}

	/**
	 * 最前一頁
	 */
	private void first() {
		currentPage = 1L;
	}

	private void previous() {
		currentPage--;
	}

	private void next() {
		currentPage++;
	}

	private void last() {
		currentPage = totalPage;
	}

	private void sort(String sortName) {		
		//設定排序狀態
		setPageSortState(sortName);		
	}
		
	
	
	/**
	 * 計算總頁數
	 * */
	private Long getTotalPage(Long totalRecords) {
	     Long totalPage = 0L;	 
	     everyPage = everyPage == null ? 10L : everyPage;
	     if (totalRecords % everyPage == 0)
	       totalPage = totalRecords / everyPage;
	     else {
	       totalPage = totalRecords / everyPage + 1;
	     }
	     return totalPage;
	}	
	

	public Long getBeginIndex() {
		this.beginIndex = (currentPage - 1) * everyPage;
		return this.beginIndex;
	}

	public void setBeginIndex(Long beginIndex) {
		this.beginIndex = beginIndex;
	}

	public Long getCurrentPage() {
		this.currentPage = currentPage == 0 ? 1 : currentPage;
		return this.currentPage;
	}

	public void setCurrentPage(Long currentPage) {
		if(0 == currentPage){
			currentPage = 1L;
		}
		this.currentPage = currentPage;
	}

	public Long getEveryPage() {
		this.everyPage = everyPage == 0 ? 10 : everyPage;
		return this.everyPage;
	}

	public void setEveryPage(Long everyPage) {		
		this.everyPage = everyPage;
	}

	public Boolean getHasNextPage() {
		this.hasNextPage = (currentPage != totalPage) && (totalPage != 0);
		return this.hasNextPage;
	}

	public void setHasNextPage(Boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public Boolean getHasPrePage() {
		this.hasPrePage = currentPage != 1;
		return this.hasPrePage;
	}

	public void setHasPrePage(Boolean hasPrePage) {
		this.hasPrePage = hasPrePage;
	}

	public Long getTotalPage() {
		return this.totalPage;
	}

	public void setTotalPage(Long totalPage) {
		if(this.currentPage > totalPage){
			this.currentPage = totalPage;
		}
		this.totalPage = totalPage;
	}

	public Long getTotalCount() {
		return this.totalCount;
	}

	public void setTotalCount(Long totalCount) {
		setTotalPage(getTotalPage(totalCount));  
		this.totalCount = totalCount;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}
	
	/**
	 * 設定排序狀態
	 * */
	private void setPageSortState(String newPageSortName){		
		//判斷之前的排序欄位是否為空
		if(StringUtils.isEmpty(sortName)){
			//預設排序為升序
			this.sortState = PageUtil.ASC;		
			this.sortInfo = PageUtil.PAGE_ASC;						
		}else{
			if(StringUtils.equalsIgnoreCase(newPageSortName, sortName)){
				//判斷sortState排序狀態值
				if(StringUtils.equalsIgnoreCase(sortState, PageUtil.ASC)){
					this.sortState = PageUtil.DESC;
					this.sortInfo = PageUtil.PAGE_DESC;								
				}else{
					this.sortState = PageUtil.ASC;
					this.sortInfo = PageUtil.PAGE_ASC;					
				}				
			}else{
				//預設
				this.sortState = PageUtil.ASC;		
				this.sortInfo = PageUtil.PAGE_ASC;
			}
		}
		sortName = newPageSortName.toLowerCase();			
	}

	public Boolean isSort() {
		return sort;
	}

	public void setSort(Boolean sort) {
		this.sort = sort;
	}


	public Long getEndinIndex() {
		this.endinIndex = (currentPage) * everyPage;
		return endinIndex;
	}

	public void setEndinIndex(Long endinIndex) {
		this.endinIndex = endinIndex;
	}	
}
2.PageState.java
package com.cm.contract.common;

import org.apache.commons.lang.StringUtils;




/**分頁狀態類
 * @author FENGWEI
 * @date 2016-5-23
 */
public enum PageState {
	
	/**
	 * 設定每頁顯示多少條
	 * */
	SETPAGE,
	/**
	 * 首頁
	 * */
	FIRST, 
	/**
	 * 向前一頁
	 * */
	PREVIOUS, 
	/**
	 * 向後一頁
	 * */
	NEXT, 
	/**
	 * 末頁
	 * */
	LAST, 
	/**
	 * 排序
	 * */
	SORT,
	/**
	 * 到第多少頁
	 * */
	GOPAGE;

	
	/**
	 * @param value 索引名稱
	 * @return 返回索引下標
	 */
	public static int getOrdinal(String value) {
		int index = -1;
		if (StringUtils.isEmpty(value)) {
			return index;
		}
		String newValue = StringUtils.trim(value).toUpperCase();
		try {
			index = valueOf(newValue).ordinal();
		} catch (IllegalArgumentException e) {}
		return index;
	}
}
3.PageUtil.java