每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          注:本文繼續分頁的上一篇 關于分頁,標簽,緩存
          hibernate分頁有現成的支持:

          query.setFirstResult(start);
          query.setMaxResults(rowNum);?


          MySql如下:
          select?*?from?table?where??limit?start,rowNum;


          Oracle如下
          select?*?from?table?where??and?rowid?not?in(select?rowid?from?t_table?where? .... and? rownum<=?(pageIndex-1)?*?size)
          and?rownum?<=?size;

          PageBean以前是設置currentPage,然后在頁面里自己判斷上一頁下一頁是什么,后來發現純粹多余,完全可以把目標頁寫進去,而且參數也統一了,以前頁面傳到Action有好幾個參數:

          if(method.equals("lastPage")){

          }
          else?if(method.equals("nextPage")){

          }
          else?if(method.equals("targetPage")){
          ????
          //.
          }


          現在統一一個參數就是pageIndex,爽多了? :)
          PageBean代碼如下:
          int?currentPage?=?1;//當前頁:Action控制
          ????int?totalPages?=?0;//總頁數?:自己運算
          ????public?static?int?pageRecorders?=?10;?//每頁記錄數,默認為10,可以在初始化的時候修改//總數據數
          ????int?pageStartRow?=?0;?//每頁的起始數? [這個字段可以去掉]
          ????int?pageEndRow?=?0;?//每頁顯示數據的終止數? [這個字段也可以去掉]
          ????boolean?hasNextPage?=?false;?//是否有下一頁:自己運算
          ????boolean?hasPreviousPage?=?false;?//是否有前一頁?:自己運算
          ????List?objList?=?new?ArrayList();//存放欲展示的對象列表
          ????int?totalRows;//總記錄數,由底層service提供

          ????
          //增加上一頁索引?[directly?to?target?page]
          ????private?int?lastPageIndex?=?1;
          ????
          //增加下一頁索引?[directly?to?target?page]
          ????private?int?nextPageIndex?=?1;

          ????
          public?int?getLastPageIndex()?{
          ????????
          return?currentPage?-?1;
          ????}

          ????
          public?int?getNextPageIndex()?{
          ????????
          return?currentPage?+?1;
          ????}


          ????
          //是否有上一頁
          ????public?boolean?isHasPreviousPage()?{
          ????????
          return?(currentPage?>?1???true?:?false);
          ????}

          ????
          //共有多少頁,service只提供有多少條記錄,多少頁數由PageBean自己運算
          ????public?int?getTotalPages()?{
          ????????
          if?(totalRows?<=?pageRecorders)?return?1;
          ????????
          return?(totalRows?%?pageRecorders?==?0???totalRows?/?pageRecorders?:?totalRows?/?pageRecorders?+?1);
          ????}

          ????
          public?int?getCurrentPage()?{
          ????????
          return?currentPage;
          ????}

          ????
          public?int?getPageEndRow()?{
          ????????
          return?pageEndRow;
          ????}

          ????
          //是否有下一頁
          ????public?boolean?isHasNextPage()?{
          ????????
          return?(currentPage?<?this.getTotalPages()???true?:?false);
          ????}

          ????
          public?int?getTotalRows()?{
          ????????
          return?totalRows;
          ????}

          ????
          public?int?getPageStartRow()?{
          ????????
          return?pageStartRow;
          ????}

          ????
          public?int?getPageRecorders()?{
          ????????
          return?pageRecorders;
          ????}

          ????
          public?void?setObjList(List?objList)?{
          ????????
          this.objList?=?objList;
          ????}

          ????
          public?void?setHasPreviousPage(boolean?hasPreviousPage)?{
          ????????
          this.hasPreviousPage?=?hasPreviousPage;
          ????}

          ????
          public?void?setTotalPages(int?totalPages)?{
          ????????
          this.totalPages?=?totalPages;
          ????}

          ????
          public?void?setCurrentPage(int?currentPage)?{
          ????????
          this.currentPage?=?currentPage;
          ????}

          ????
          public?void?setPageEndRow(int?pageEndRow)?{
          ????????
          this.pageEndRow?=?pageEndRow;
          ????}

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

          ????
          public?void?setTotalRows(int?totalRows)?{
          ????????
          this.totalRows?=?totalRows;
          ????}

          ????
          public?void?setPageStartRow(int?pageStartRow)?{
          ????????
          this.pageStartRow?=?pageStartRow;
          ????}

          ????
          public?void?setPageRecorders(int?pageRecorders)?{
          ????????
          this.pageRecorders?=?pageRecorders;
          ????}

          ????
          public?List?getObjList()?{
          ????????
          return?objList;
          ????}
          }

          在action中負責把pageIndex傳給PageBean,以及通過service得到的記錄總數傳給pageBean就OK了


          補充:另,在IDEA中文站上看到一篇文章?
          分頁,心中的痛? ????? 提到用一個統一的接口來規范:
          代碼如下:
          public?interface?Page?{
          boolean?isFirstPage();
          boolean?isLastPage();
          boolean?hasNextPage();
          boolean?hasPreviousPage();
          int?getLastPageNumber();
          Object?getThisPageElements();
          int?getTotalNumberOfElements();
          int?getThisPageFirstElementNumber();
          int?getThisPageLastElementNumber();
          int?getNextPageNumber();
          int?getPreviousPageNumber();
          int?getPageSize();
          int?getThisPageNumber?();
          }

          個人感覺思想挺好,不過我還是喜歡用一個PageBean類就足夠了,沒必要搞復雜了,在PageBean中其實是currentPage為核心.

          一個工具能夠在任何地方都能容易的嵌入進去,這就很小巧了,也就夠用了.? :)
          posted on 2006-05-08 22:46 Alex 閱讀(1203) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 沙湾县| 天镇县| 文化| 顺平县| 洛隆县| 伊金霍洛旗| 隆安县| 白朗县| 鄯善县| 三明市| 内乡县| 革吉县| 蓬安县| 阆中市| 定安县| 荣昌县| 凤台县| 饶阳县| 迁西县| 贡山| 辽阳市| 工布江达县| 文昌市| 衢州市| 临洮县| 广饶县| 仁布县| 开化县| 甘泉县| 尚志市| 仪陇县| 绥滨县| 沅陵县| 山阳县| 乾安县| 平果县| 左贡县| 乌鲁木齐市| 太和县| 霞浦县| 阳谷县|