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

首頁 > 編程 > Java > 正文

舉例詳解用Java實現web分頁功能的方法

2019-11-26 14:54:54
字體:
來源:轉載
供稿:網友

分頁問題是一個非常普遍的問題,開發者幾乎都會遇到,這里不討論具體如何分頁,說明一下Web方式下分頁的原理。首先是查詢獲得一個結果集(表現為查詢數據庫獲得的結果),如果結果比較多我們一般都不會一下顯示所有的數據,那么就會用分頁的方式來顯示某些數據(比如20條)。因為Http的無狀態性,每一次提交都是當作一個新的請求來處理,即使是換頁,上一次的結果對下一次是沒有影響的。

這里總結三種實現分頁的方式,不知道還有沒有別的!
1.每次取查詢結果的所有數據,然后根據頁碼顯示指定的紀錄。
2.根據頁面只取一頁數據,然后顯示這一頁,這里要構造sql語句。
3.取一定頁數的數據,就是前面兩種的折中。

這里還要注意的是這些數據是放在request還是session中,這里一一討論

1.一般不會放在session中,因為會占用大量內存,所以要放在request里面。
優點:實現比較簡單,查詢速度比較快。
缺點:占用內存多一些,網絡傳輸數據多。
對于數據量比較少的查詢這種方法比較合適。這里有人把數據放在session中,這樣換頁的時候就不用重新查詢,但是這樣是極其不好的,強烈建議不要這樣使用。

2.肯定不會放在session中,因為放在session中沒有意義。
優點:占用內存少。
缺點:比較麻煩,必須先獲得查詢結果的總數,因為要知道有多少紀錄才知道有多少頁。另外要構造分頁查詢語句,對于不同的數據庫是不一樣的。

3.這種情況是肯定放在session中了,要不然我干嗎取好幾頁呀,這樣的實現是為了減少數據庫查詢的次數,比如我保存第1到10的紀錄,那么換頁的時候如果在1到10之間就可以直接從session獲取。如果換到11頁,我可以重新設置緩存11到
20頁的數據(或者5到15頁的數據),這樣的話換10次才需要一次數據庫查詢操作。
優點:占用內存相對不多,提高平均查詢速度。
缺點:實現起來更加復雜,可能存在臟數據,需要自己定義一個緩存集合。如果查詢的數據量比較大,可以考慮采用這樣方式。

下面的設計每次只獲取一頁數據,每次都要重新設置查詢總數,具體如何獲得自己實現,這是一個比較通用的分頁實現。

這里設計一個接口:

package treeroot.util;import java.util.List;/*** 該接口用來實現分頁功能,注意這里沒有提供修改的功能。* @author treerot* @version 1.0* @since 2004-9-30*/public interface Pageable{  /**  * 獲得數據結果  * @return  */  public List getResult();  /**  * 獲得查詢總數  * @return  */  public int getCount();  /**  * 獲得每頁紀錄數  * @return  */  public int getPageSize();  /**  * 獲得當前頁編號  * @return  */  public int getCurrentPage();  /**  * 獲得總頁數  * @return  */  public int getPages();  /**  * 每頁默認顯示紀錄數  */  public final static int DEFAULT_PAGESIZE=20;}

這個接口非常簡單,就是包括一個結果列表和一些分頁的必要信息,這里注意幾點:
1.這個接口的實現表示的是某一次查詢的某一頁數據,和上次查詢無關
2.這個接口的實現應該是只讀的,也就是說不可以修改的。
3.getPages()方法是冗余的,但是這里仍然提供這個方法。

下面給出一個抽象實現:

package treeroot.util;import java.util.List;/*** @author treerot* @version 1.0* @since 2004-9-30*/public abstract class AbstractPage implements Pageable{  private int currentPage;  private int pageSize;  private int pages;     protected int count;  protected List result;  /**  * 指定當前頁   * @param currentPage  * @throws PageException  */  public AbstractPage(int currentPage){    this(currentPage,Pageable.DEFAULT_PAGESIZE);  }  /**  * 指定當前頁和頁大小  * @param currentPage  * @param pageSize  * @throws PageException  */  public AbstractPage(int currentPage,int pageSize) {    this.currentPage=currentPage;    this.pageSize=pageSize;  }  protected void checkPage(int currentPage) throws PageException{    if((currentPage<1)||(currentPage>this.getPages()))       throw new PageException("頁超出范圍:總頁數為"+this.getPages()+",當前頁為"+currentPage);  }  /**  * 這個方法被子類重寫用來初始化,也就是計算count值和result結果,在子類 的構造函數中調用?! ?/  abstract protected void init() throws PageException;    public List getResult()  {    return result;  }   public int getCount()  {    return count;  }  public int getPageSize()  {    return pageSize;  }  public int getCurrentPage()  {    return currentPage;   }   public int getPages()  {    if(pages==0) this.pages=(count+pageSize-1)/pageSize;    return pages;  }}

這個抽象類實現了接口中的所有方法,但是定義了一個抽象方法init(),在子類中必須實現這個方法。上面的一個接口和一個抽象類看起來比較簡單,你可能會覺得好像什么都沒有做,實現上確實沒有做什么,但是卻可以給開發帶來很大的幫助。我們可以根據自己的需要要繼承這個抽象類,而數據可以通過各種方式獲得,比如直接通過一個List獲得,或者通過JDBC,Hibernate等等,不過我們都需要把結果封裝到一個List里面,通過Hibernate就顯得特別方便了。

PageException是自定義的一個異常

package treeroot.util   /*** @author treeroot* @version 1.0* @since 2004-9-30*/public class PageException extends Exception{  public PageException(){    super();  }  public PageException(String message){    super(message);  }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线| 亚洲全黄一级网站| 亚洲97在线观看| 久久久精品网站| 日韩激情在线视频| 亚洲情综合五月天| 最近中文字幕日韩精品| 久久久久日韩精品久久久男男| 久久久久久久久久久av| 亚洲男人天天操| 欧美激情图片区| 亚洲精品国产成人| 国产91精品不卡视频| 国产一区二区三区在线观看网站| 亚洲精品中文字幕av| 亚洲片国产一区一级在线观看| 亚洲视频专区在线| 黄色91在线观看| 亚洲欧美另类国产| 欧美国产视频日韩| 成人免费视频xnxx.com| 这里只有精品视频| 国产精品高清在线观看| 欧美日韩国产一区在线| 亚洲综合社区网| 日韩精品视频免费在线观看| 2020欧美日韩在线视频| 98精品国产高清在线xxxx天堂| 欧美电影免费看| 久久精品视频网站| 成人一区二区电影| 久久久久久999| 亚洲欧美日韩中文视频| 亚洲一区二区三区777| 一本大道香蕉久在线播放29| 欧美激情第99页| 日韩在线观看成人| 久久视频这里只有精品| 欧美精品激情在线| 日本精品免费观看| 色婷婷**av毛片一区| 日韩精品视频免费在线观看| 在线观看国产精品91| 精品在线小视频| 欧美一区亚洲一区| 亚洲精品国产拍免费91在线| 欧美一区二区三区图| 精品国内自产拍在线观看| 精品国产31久久久久久| 亚洲第一精品夜夜躁人人爽| 欧美精品免费在线| 亚洲天堂日韩电影| 欧美中文字幕在线视频| 日韩精品高清在线| 欧美理论电影在线观看| 国产精品福利片| 久久精品国产电影| 国产一区二区av| 久久精品在线播放| 91精品视频网站| 欧美日韩国产999| 一二美女精品欧洲| 国产精品青草久久久久福利99| 欧美日本亚洲视频| 日韩中文第一页| 91精品免费久久久久久久久| 国产国语刺激对白av不卡| 国产91亚洲精品| 亚洲欧美国产一区二区三区| 中文字幕最新精品| 全色精品综合影院| 国产精品视频免费在线| 亚洲成成品网站| 欧美日韩在线免费| 中文字幕欧美亚洲| 久久五月天综合| 国产精品一区二区电影| 九色精品美女在线| 国产69久久精品成人| 国产精品va在线播放| 中文字幕日韩专区| 日韩精品视频观看| 日韩视频中文字幕| 日韩国产激情在线| 国产一区二区在线免费视频| 亚洲xxxx3d| 在线观看欧美日韩国产| 高清一区二区三区日本久| 久久免费在线观看| 久久精品视频va| 欧美成人精品在线播放| 亚洲品质视频自拍网| 97色在线观看| 久久久国产成人精品| 在线国产精品播放| 久久免费视频在线观看| 亚洲视频在线看| 色综久久综合桃花网| 欧美激情xxxxx| 久久精品一区中文字幕| 国产成人在线视频| 久久视频在线看| 91亚洲精品在线| 中文字幕欧美日韩| 欧美午夜精品久久久久久久| 久久99热这里只有精品国产| 午夜精品蜜臀一区二区三区免费| 欧美自拍视频在线观看| 91免费精品国偷自产在线| 国产一区二区三区视频在线观看| 性欧美激情精品| 欧美色道久久88综合亚洲精品| 久久av中文字幕| 久久综合免费视频影院| 欧美激情第6页| 亚洲日本aⅴ片在线观看香蕉| 国产精品成人一区二区三区吃奶| 九色成人免费视频| 精品久久香蕉国产线看观看gif| 日韩成人在线网站| 欧美人成在线视频| 精品久久香蕉国产线看观看gif| 亚洲3p在线观看| 一级做a爰片久久毛片美女图片| 国产深夜精品福利| 日韩高清有码在线| 另类美女黄大片| 欧美有码在线视频| 国产精品白丝av嫩草影院| 久久91亚洲精品中文字幕| 日韩av三级在线观看| 成人性生交xxxxx网站| 久久久久中文字幕2018| 国产精品高清免费在线观看| 欧美日韩在线观看视频小说| 亚洲第一区在线| 国产一区二区三区四区福利| 欧美高清在线视频观看不卡| 欧美劲爆第一页| 黑人巨大精品欧美一区二区免费| 国产成人精品亚洲精品| 国产亚洲日本欧美韩国| 日韩在线免费视频观看| 国产欧美一区二区三区在线| 亚洲福利影片在线| 91亚洲精品久久久久久久久久久久| 欧美成人免费网| 日本久久亚洲电影| 欧美日韩日本国产| 亚洲成年人在线| 欧美贵妇videos办公室| 97视频在线观看视频免费视频| 精品国产一区二区在线| 亚洲视频777| 欧美性猛交xxxx富婆弯腰| 麻豆乱码国产一区二区三区| 亚洲午夜女主播在线直播| 欧日韩不卡在线视频| 97在线观看视频国产| 久久91精品国产91久久久| 久久久之久亚州精品露出| 午夜精品99久久免费| 久久色在线播放| 亚洲色在线视频|