每日一得

          不求多得,只求一得 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 閱讀(1197) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 苏尼特左旗| 永福县| 武宣县| 古田县| 闵行区| 碌曲县| 酉阳| 边坝县| 古蔺县| 明星| 九龙县| 闻喜县| 铜川市| 海伦市| 监利县| 盐山县| 鄂托克旗| 湄潭县| 斗六市| 榆社县| 南丰县| 宁化县| 将乐县| 固阳县| 朝阳区| 时尚| 武山县| 武义县| 阳春市| 河间市| 清新县| 信阳市| 玛纳斯县| 定日县| 遂川县| 霍城县| 乐清市| 新化县| 保亭| 莲花县| 陆川县|