springmvc 分页查询的简单实现示例代码

目前较常用的分页实现办法有两种:

1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示。

2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示。

对于数据量并不大的简单的管理系统而言,第一种实现方法相对来说容易使用较少的代码实现分页这一功能,本文也正是为大家介绍这种方法:

代码片段:

1,Page.java

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

/** 
 * 分页工具类 
 * @author FENGWEI 
 * @date 2016-5-23 
 */ 
public class PageUtil { 
   
  public static final String ASC = "asc"; 
  public static final String DESC = "desc"; 
  public static final String PAGE_DESC = "↓"; 
  public static final String PAGE_ASC = "↑"; 
  public static final String PAGE_NULL = " ";  
  public static final String SESSION_PAGE_KEY = "page";   
   
   
  /** 
   * 初始化分页类 
   * @param initPageSql 未分页的查询SQL 
   * @param totalCount  总行数 
   * @param index    分页状态 
   * @param value    只有在设置每页显示多少条时,值不会NULL,其它为NULL 
   */ 
  public static Page inintPage(Long totalCount,Integer index,String value,Page sessionPage){  
    Page page = null; 
    if(index < 0){ 
       page = new Page(totalCount); 
    }else{ 
       /**每页显示多少条*/ 
       Long everPage = null == value ? 10 : Long.parseLong(value); 
       /**获取Session中的分页类,方便保存页面分页状态*/ 
       page = sessionPage;        
       page.setEveryPage(everPage); 
       page.setTotalCount(totalCount);       
    }   
    return page;     
  } 
   
   
 
   
  /** 
   * 当页点击:首页,前一页,后一页,末页,排序,到第多少页时进行分页操作 
   * @param index 分页状态 
   * @param value 排序字段名或者到第多少页 
   */ 
  public static Page execPage(int index,Page sessionPage){  
    Page page = sessionPage;       
    /**调用方法进行分页计算*/ 
    page.pageState(index,value);     
    return page;     
  } 
 
} 

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。