<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不做浮躁的人
    正在行走的人...
    posts - 171,  comments - 51,  trackbacks - 0
    延續上一篇博客,本文主要講講如果為flexorm增加分頁查詢的功能,當然是基于Criteria,flexorm沒有提供查詢語言,criteria是目前的首選。

    1、我修改Criteria類,傳入兩個參數:

    private var _firstResult:int=-1;
      private var _maxResult:int=-1;

      public function setFirstResult(value:int):Criteria {
       _firstResult=value;
       return this;
      }

      public function setMaxResult(value:int):Criteria {
       _maxResult=value;
       return this;
      }

      public function get firstResult():int {
       return _firstResult;
      }

      public function get maxResult():int {
       return _maxResult;
      }

    值得注意的是,我的setXX方法,不同傳統的setXX方法,返回Criteria自身,也是為了寫代碼方便。

    2、在SelectCommand方法增加兩個參數定義:
      private var _firstResult:int=-1;
      private var _maxResult:int=-1;
    默認值為-1。

    3、在SelectCommand的setCriteria(crit:Criteria)方法后面增加以下代碼,將Criteria的新增加的兩個參數值傳進來。
    _firstResult=crit.firstResult;
       _maxResult=crit.maxResult;

    4、在SelectCommand的prepareStatement()的_statement.text=sql;語句前增加以下代碼:

    if (_firstResult != -1 && _maxResult != -1) {
        sql+=" limit " + _firstResult + "," + _maxResult;
       }

    該代碼利用sqlite的limit語法進行分頁。

    5、以上基本的功能代碼實現完畢,下面在EntityManager實現分頁的接口代碼:

    public function findPage(page:Page, c:Criteria):Page {
       page=page.cleanDatas();
       if (page.countTotal) {
        var totalCount:int=fetchCriteriaCountResult(c);
        page.totalCount=totalCount;
       }

       validPageInfo(page);
       if (page.totalCount == 0) {
        return page;
       }

       c.setFirstResult(page.startNo);
       c.setMaxResult(page.pageSize);

       page.datas=fetchCriteria(c);
       return page;
      }


    private function validPageInfo(page:Page):void {
       if (page.pageNo == 0 || page.totalCount == 0) {
        page.pageNo=1;
       } else if (page.totalPageCnt < page.pageNo) {
        page.pageNo=page.totalPageCnt;
       }
      }

    6、其它:可以在Criteria上增加一個PropertyFilter的功能:
    public function addCriteriaFilter(propertyFilters:ArrayCollection):Criteria {
       for each (var pf:PropertyFilter in propertyFilters) {
        if (StringUtils.isEmpty(pf.matchType) || pf.matchType == PropertyFilter.MATCHTYPE_EQ) {
         this.addEqualsCondition(pf.matchField, pf.matchValue);
        } else if (pf.matchType == PropertyFilter.MATCHTYPE_LIKE) {
         this.addLikeCondition(pf.matchField, '%' + (pf.matchValue as String) + '%');
        } else if (pf.matchType == PropertyFilter.MATCHTYPE_LIKESTART) {
         this.addLikeCondition(pf.matchField, (pf.matchValue as String) + '%');
        } else if (pf.matchType == PropertyFilter.MATCHTYPE_LIKEEND) {
         this.addLikeCondition(pf.matchField, '%' + (pf.matchValue as String));
        } else if (pf.matchType == PropertyFilter.MATCHTYPE_LT) {
         this.addLessThanCondition(pf.matchField, pf.matchValue as String);
        } else if (pf.matchType == PropertyFilter.MATCHTYPE_GT) {
         this.addGreaterThanCondition(pf.matchField, pf.matchValue as String);
        } else {
         throw new Error("傳入的過濾匹配類型參數不正確。");
        }
       }
       return this;
      }
    7、測試代碼:
    private function searchUsers(_page:Page, _propertyFilters:ArrayCollection=null):void {
        var c:Criteria=entityManager.createCriteria(IaUser).addCriteriaFilter(_propertyFilters);
        page=entityManager.findPage(_page, c);
       }
    總結,采用limit實現分頁后,大數據量達到10萬后,性能差異將是數量級的提高。
    posted on 2010-12-13 09:52 不做浮躁的人 閱讀(1501) 評論(0)  編輯  收藏 所屬分類: air

    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(9)

    隨筆分類(31)

    隨筆檔案(75)

    文章分類(1)

    文章檔案(3)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区精品视频| 亚洲午夜视频在线观看| 亚洲成AV人片在WWW| 18禁超污无遮挡无码免费网站国产 | 91精品免费在线观看| 亚洲高清日韩精品第一区| 37pao成人国产永久免费视频| 亚洲国语精品自产拍在线观看| 国产免费阿v精品视频网址| 国产亚洲福利精品一区| 精品一区二区三区无码免费视频| 亚洲资源在线观看| 美女裸身网站免费看免费网站| 久久亚洲国产成人影院| 又粗又大又硬又爽的免费视频| 免费很黄无遮挡的视频毛片| 精品国产亚洲一区二区在线观看 | 国产亚洲精久久久久久无码| 久久99精品视免费看| 亚洲福利秒拍一区二区| 天天摸天天操免费播放小视频 | 免费看美女让人桶尿口| 免费的黄色的网站| 亚洲AV无码久久精品蜜桃| 亚欧在线精品免费观看一区| 亚洲精品人成网线在线播放va| 亚洲国产精品无码久久久久久曰| 女同免费毛片在线播放| 一本色道久久88亚洲精品综合| 国产91在线免费| 3344在线看片免费| 亚洲午夜精品久久久久久app| 免费人成视频x8x8入口| 久久久久久久岛国免费播放 | 日本一道本高清免费| 精品多毛少妇人妻AV免费久久| 亚洲第一永久在线观看| 免费真实播放国产乱子伦| 免费A级毛片av无码| 亚洲AV成人无码网站| 亚洲AV无码专区亚洲AV伊甸园 |