亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java分頁工具類的使用方法

2024-07-14 08:40:05
字體:
來源:轉載
供稿:網友

說明:曾經在網上看過花樣繁多的分頁,很多都號稱如何通用,但很多時候往往不盡如人意:有在分頁類中還加入URL地址信息的,有在分頁類中還進行分頁動作處理(此動作完全屬于操作數據庫方面的事情)的?,F在好了,經本人總結與提煉:

無論你是否自己手動分頁,還是借助了框架進行分頁。此工具類都可以幫助你達到穩定的分頁效果(包括導航頁碼功能),而且使用方法也相對簡單:好了,廢話少說,代碼如下:

package test.dao;  import java.util.List;  /**  * 用于分頁的工具類  * @author 莫取網名  */ public class Pager<T> {   private List<T> list; //對象記錄結果集  private int total = 0; // 總記錄數  private int limit = 20; // 每頁顯示記錄數  private int pages = 1; // 總頁數  private int pageNumber = 1; // 當前頁    private boolean isFirstPage=false;  //是否為第一頁  private boolean isLastPage=false;   //是否為最后一頁  private boolean hasPreviousPage=false; //是否有前一頁  private boolean hasNextPage=false;  //是否有下一頁    private int navigatePages=8; //導航頁碼數  private int[] navigatePageNumbers; //所有導航頁號    public Pager(int total, int pageNumber) {   init(total, pageNumber, limit);  }    public Pager(int total, int pageNumber, int limit) {   init(total, pageNumber, limit);  }    private void init(int total, int pageNumber, int limit){   //設置基本參數   this.total=total;   this.limit=limit;   this.pages=(this.total-1)/this.limit+1;      //根據輸入可能錯誤的當前號碼進行自動糾正   if(pageNumber<1){    this.pageNumber=1;   }else if(pageNumber>this.pages){    this.pageNumber=this.pages;   }else{    this.pageNumber=pageNumber;   }      //基本參數設定之后進行導航頁面的計算   calcNavigatePageNumbers();      //以及頁面邊界的判定   judgePageBoudary();  }    /**   * 計算導航頁   */  private void calcNavigatePageNumbers(){   //當總頁數小于或等于導航頁碼數時   if(pages<=navigatePages){    navigatePageNumbers=new int[pages];    for(int i=0;i<pages;i++){     navigatePageNumbers[i]=i+1;    }   }else{ //當總頁數大于導航頁碼數時    navigatePageNumbers=new int[navigatePages];    int startNum=pageNumber-navigatePages/2;    int endNum=pageNumber+navigatePages/2;        if(startNum<1){     startNum=1;     //(最前navigatePages頁     for(int i=0;i<navigatePages;i++){      navigatePageNumbers[i]=startNum++;     }    }else if(endNum>pages){     endNum=pages;     //最后navigatePages頁     for(int i=navigatePages-1;i>=0;i--){      navigatePageNumbers[i]=endNum--;     }    }else{     //所有中間頁     for(int i=0;i<navigatePages;i++){      navigatePageNumbers[i]=startNum++;     }    }   }  }   /**   * 判定頁面邊界   */  private void judgePageBoudary(){   isFirstPage = pageNumber == 1;   isLastPage = pageNumber == pages && pageNumber!=1;   hasPreviousPage = pageNumber > 1;   hasNextPage = pageNumber < pages;  }      public void setList(List<T> list) {   this.list = list;  }   /**   * 得到當前頁的內容   * @return {List}   */  public List<T> getList() {   return list;  }   /**   * 得到記錄總數   * @return {int}   */  public int getTotal() {   return total;  }   /**   * 得到每頁顯示多少條記錄   * @return {int}   */  public int getLimit() {   return limit;  }   /**   * 得到頁面總數   * @return {int}   */  public int getPages() {   return pages;  }   /**   * 得到當前頁號   * @return {int}   */  public int getPageNumber() {   return pageNumber;  }    /**   * 得到所有導航頁號   * @return {int[]}   */  public int[] getNavigatePageNumbers() {   return navigatePageNumbers;  }   public boolean isFirstPage() {   return isFirstPage;  }   public boolean isLastPage() {   return isLastPage;  }   public boolean hasPreviousPage() {   return hasPreviousPage;  }   public boolean hasNextPage() {   return hasNextPage;  }   public String toString(){   StringBuffer sb=new StringBuffer();   sb.append("[")    .append("total=").append(total)    .append(",pages=").append(pages)    .append(",pageNumber=").append(pageNumber)    .append(",limit=").append(limit)    .append(",isFirstPage=").append(isFirstPage)    .append(",isLastPage=").append(isLastPage)    .append(",hasPreviousPage=").append(hasPreviousPage)    .append(",hasNextPage=").append(hasNextPage)   .append(",navigatePageNumbers=");   int len=navigatePageNumbers.length;   if(len>0)sb.append(navigatePageNumbers[0]);   for(int i=1;i<len;i++){    sb.append(" "+navigatePageNumbers[i]);   }   sb.append(",list.size="+list.size());   sb.append("]");   return sb.toString();  } } 

關于用法:使用步驟如下:

1).不管是否用了條件查詢,首先count出相應的總條數
2).構造一個Pager類(關于limit參數可根據自身前臺進行取舍)
3).根據構造好的Pager類獲取已經自動糾正過的pageNumber參數,-1再乘個limit,做為實際要查詢的第一條記錄的位置
4).設置要查從起始位置開始,直到第limit條的所有記錄.(如果手工分頁,則也有可能第二個參數是結尾記錄的位置偏移,具體情況視數據庫而定)
5).將[條件]查詢出的list設置入pager對象中并返回.
6).在展現層通過Servlet或Action或直接拿到這個pager對象即可使用,具體如何拼接url的事情,也應該交由展現層來完成即可。

int totalCount=Integer.valueOf(queryCount.uniqueResult().toString()); Pager pager=new Pager(totalCount, pageNumber,limit); queryList.setFirstResult((pager.getPageNumber()-1)*limit); //容錯處理 queryList.setMaxResults(limit); pager.setList(queryList.list()); return pager; 

上述代碼是使用了hibernate的一個簡單示例。如果你是手工分頁,也按使用步驟來即可。

當然了,分頁可以放在dao層來完成,也可以放在Service層來完成。而Servlet或Action則去調用service層的代碼。個人認為:分頁其實也是一種業務需要,因此,可以將其放在業務層。因為DAO層提供相應的[條件查詢]list及[條件]統計count,在業務層完全可以根據自己的需要進行方法調用(只不過需要按既定的步驟來罷了,當然了,很多時候,業務都是有既定的流程步驟的)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕免费视频| 国产成人精品日本亚洲专区61| 三级精品视频久久久久| 亚洲欧美中文另类| 日韩视频在线免费观看| 91在线看www| 琪琪第一精品导航| 国产精品99免视看9| 亚洲人精品午夜在线观看| 欧日韩在线观看| 久久人人爽人人爽人人片av高请| 欧美日本国产在线| 亚洲国产精品专区久久| 欧美韩日一区二区| 久久久久久久久久久免费精品| 国产日本欧美视频| 久热国产精品视频| 色综合五月天导航| 91精品久久久久久综合乱菊| 亚洲欧美一区二区三区久久| 久久久久久久999精品视频| 在线播放亚洲激情| 亚洲美女精品成人在线视频| 国产精品久久久久久久久借妻| 国产香蕉97碰碰久久人人| 国产精品日韩在线观看| 久久久久久av| 一区二区三区回区在观看免费视频| 青草青草久热精品视频在线观看| 国产丝袜精品第一页| 亚洲va码欧洲m码| 亚洲另类欧美自拍| 欧美天堂在线观看| 亚洲第一男人av| 久久精品电影网| 亚洲色图色老头| 亚洲激情电影中文字幕| 高清日韩电视剧大全免费播放在线观看| 亚洲精品成a人在线观看| 国产精品福利久久久| 久久久成人精品| 久久免费少妇高潮久久精品99| 精品在线观看国产| 日韩精品视频在线免费观看| 成人在线激情视频| 亚洲第一精品久久忘忧草社区| 国产精品久久久久久久7电影| 久久九九全国免费精品观看| 欧美在线免费视频| 日韩视频精品在线| 亚洲国产福利在线| 一区二区三区久久精品| 久久色精品视频| 亚洲成人激情小说| 日韩精品久久久久久福利| 久久精品久久久久久国产 免费| 色老头一区二区三区| 成人xxxx视频| 一区二区三区视频免费在线观看| 国产欧美日韩免费| 亚洲成成品网站| 日韩一区二区三区在线播放| 久久99视频免费| 欧洲日本亚洲国产区| …久久精品99久久香蕉国产| 91在线免费网站| 国产mv久久久| 国产欧美精品一区二区三区-老狼| 国产伦精品一区二区三区精品视频| 97视频色精品| 亚洲欧美日韩国产中文| 国产精国产精品| 81精品国产乱码久久久久久| 91人成网站www| 国产一区二中文字幕在线看| 欧美在线免费看| 亚洲精品色婷婷福利天堂| 国产精品美乳一区二区免费| 色婷婷av一区二区三区在线观看| 91久久久久久久| 亚洲а∨天堂久久精品9966| 91香蕉电影院| 中文字幕免费精品一区高清| 日韩激情在线视频| 日本一欧美一欧美一亚洲视频| 91久久精品视频| 岛国精品视频在线播放| 欧美专区国产专区| 亚洲综合在线做性| 亚洲另类图片色| 欧美亚洲免费电影| 国产精品亚洲激情| 亚州精品天堂中文字幕| 成人观看高清在线观看免费| 国产精品一区二区三区成人| 国产丝袜精品视频| 久久精品国产欧美激情| 亚洲人成电影在线观看天堂色| 日韩视频永久免费观看| 欧美视频13p| 欧美在线视频网站| 色噜噜久久综合伊人一本| 国内免费久久久久久久久久久| 欧美日韩在线视频首页| 欧美视频二区36p| 尤物yw午夜国产精品视频| 国产成人精品免费久久久久| 精品性高朝久久久久久久| 亚洲色图五月天| 日韩有码在线播放| 98精品国产自产在线观看| 亚洲自拍偷拍视频| 国产成人久久精品| 91精品在线观看视频| 亚洲成人久久一区| 97在线精品国自产拍中文| 久久久精品一区二区| 久久久久久久久久亚洲| 一本一本久久a久久精品综合小说| 亚洲午夜av久久乱码| 国产精品入口福利| 午夜精品视频网站| 日韩av片免费在线观看| 久久69精品久久久久久久电影好| 九九热这里只有精品免费看| 中国china体内裑精亚洲片| 最新国产精品拍自在线播放| 国产成人在线视频| 成人激情免费在线| 色中色综合影院手机版在线观看| 成人中文字幕+乱码+中文字幕| 国外视频精品毛片| 国产精品7m视频| 国产一区二区三区中文| 日韩中文字幕免费看| 日韩中文在线视频| 国产精品久久久亚洲| 亚洲视频电影图片偷拍一区| 久久久亚洲国产| 欧美一级片在线播放| 欧美日韩亚洲一区二区| 欧美寡妇偷汉性猛交| 欧美视频专区一二在线观看| 国产精品91久久久| 日韩高清电影好看的电视剧电影| 一区二区在线免费视频| 欧美大片在线看免费观看| 国产精品日韩一区| 精品亚洲一区二区三区| 国产自产女人91一区在线观看| 日韩免费精品视频| 亚洲xxxx妇黄裸体| 伊人久久久久久久久久久久久| 欧美黄色成人网| 日韩欧美a级成人黄色| 91视频国产高清| 国产精品白嫩初高中害羞小美女| 国语自产偷拍精品视频偷| 国产精品mp4| 久久久国产一区二区| 久久精品成人一区二区三区| 国产va免费精品高清在线| 尤物tv国产一区| 最新日韩中文字幕|