<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)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费无码婬片aaa直播表情| 久久久久久毛片免费播放| 五月婷婷免费视频| 在线日本高清免费不卡| 亚洲人成电影福利在线播放 | 120秒男女动态视频免费| 国产麻豆剧传媒精品国产免费| 日韩亚洲欧洲在线com91tv| 亚洲高清乱码午夜电影网| 免费国产黄网站在线观看视频 | 永久免费av无码网站yy| 在线jyzzjyzz免费视频| 亚洲第一AV网站| 免费国产污网站在线观看15 | 亚洲熟女乱综合一区二区| 亚洲砖码砖专无区2023| 免费A级毛片av无码| 亚洲嫩草影院在线观看| 精品一区二区三区无码免费视频 | 亚洲a∨国产av综合av下载 | 69成人免费视频| 亚洲电影一区二区| CAOPORN国产精品免费视频| 国产美女无遮挡免费视频| 天堂亚洲国产中文在线| 亚洲国产精品免费在线观看| 亚洲AV永久无码精品成人| 中文字幕一区二区免费| 国产av无码专区亚洲国产精品| 国产偷伦视频免费观看| 亚洲va久久久噜噜噜久久天堂| 久久久久av无码免费网| 亚洲av日韩综合一区二区三区| 亚洲精品乱码久久久久久中文字幕 | 亚洲欧洲美洲无码精品VA | 久久久久久国产精品免费免费男同| 国产亚洲色视频在线| 精品国产免费人成网站| 亚洲a级在线观看| 久久WWW色情成人免费观看| 亚洲香蕉久久一区二区|