每日一得

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          注:本文繼續(xù)分頁的上一篇 關(guān)于分頁,標(biāo)簽,緩存
          hibernate分頁有現(xiàn)成的支持:

          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以前是設(shè)置currentPage,然后在頁面里自己判斷上一頁下一頁是什么,后來發(fā)現(xiàn)純粹多余,完全可以把目標(biāo)頁寫進(jìn)去,而且參數(shù)也統(tǒng)一了,以前頁面?zhèn)鞯紸ction有好幾個參數(shù):

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

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

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


          現(xiàn)在統(tǒng)一一個參數(shù)就是pageIndex,爽多了? :)
          PageBean代碼如下:
          int?currentPage?=?1;//當(dāng)前頁:Action控制
          ????int?totalPages?=?0;//總頁數(shù)?:自己運算
          ????public?static?int?pageRecorders?=?10;?//每頁記錄數(shù),默認(rèn)為10,可以在初始化的時候修改//總數(shù)據(jù)數(shù)
          ????int?pageStartRow?=?0;?//每頁的起始數(shù)? [這個字段可以去掉]
          ????int?pageEndRow?=?0;?//每頁顯示數(shù)據(jù)的終止數(shù)? [這個字段也可以去掉]
          ????boolean?hasNextPage?=?false;?//是否有下一頁:自己運算
          ????boolean?hasPreviousPage?=?false;?//是否有前一頁?:自己運算
          ????List?objList?=?new?ArrayList();//存放欲展示的對象列表
          ????int?totalRows;//總記錄數(shù),由底層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只提供有多少條記錄,多少頁數(shù)由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中負(fù)責(zé)把pageIndex傳給PageBean,以及通過service得到的記錄總數(shù)傳給pageBean就OK了


          補(bǔ)充:另,在IDEA中文站上看到一篇文章?
          分頁,心中的痛? ????? 提到用一個統(tǒng)一的接口來規(guī)范:
          代碼如下:
          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類就足夠了,沒必要搞復(fù)雜了,在PageBean中其實是currentPage為核心.

          一個工具能夠在任何地方都能容易的嵌入進(jìn)去,這就很小巧了,也就夠用了.? :)
          posted on 2006-05-08 22:46 Alex 閱讀(1197) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 曲麻莱县| 团风县| 托克逊县| 彰化市| 湘潭县| 宜川县| 札达县| 西乌珠穆沁旗| 柯坪县| 衡阳市| 永昌县| 正阳县| 凤冈县| 鲁山县| 宝兴县| 文安县| 新巴尔虎左旗| 嘉善县| 儋州市| 仪陇县| 贡觉县| 屯昌县| 遂宁市| 扶沟县| 榆中县| 保山市| 定日县| 德江县| 临桂县| 南京市| 巴楚县| 梅州市| 庆元县| 静乐县| 紫阳县| 青冈县| 黔江区| 五峰| 洛阳市| 隆德县| 海兴县|