在我
前一篇blog中,我大概介紹了下Flexorm的基本用法。現在由于要在一個項目中進行使用,下午花了些時間大概看看。
flexorm盡管沒有查詢語言,但是它的Criteria做的基本上也能滿足要求了,比如eq,like以及and,or的Restriction都做了。畢竟用在客戶端的flexorm不會很復雜。但是flexorm沒有做pagnation。沒有充分利用sqlite的limit。如果我們的數據到了10萬條,每次檢索還是費時費力,有必要利用limit語法做分頁。
因此,我首先修改代碼來計算count。
1、我原計劃繼承SelectCommand來實現一個SelectCountCommand的類,結果發現hack代碼太多,不如直接在SelectCommand上增加一個方法,因為count對比一般的select無非是select進行改變和去掉orderby。增加以下方法:
public function excuteCount():void {
if (_changed)
prepareStatement();
_statement.text=_statement.text.replace(/select.*?from/gi, "select count(*) as cnt from").replace(/order\s*by/gi, '');
if (_debugLevel > 0)
debug();
_statement.execute();
if (_responder == null)
_result=_statement.getResult().data;
}
2、修改SelectCommand類后,自然要修改EntityManager類,提供查詢Count的方法。
public function fetchCriteriaCountResult(crit:Criteria):int {
var selectCommand:SelectCommand=crit.entity.selectCommand.clone();
selectCommand.setCriteria(crit);
selectCommand.excuteCount();
var cnt:int=(selectCommand.result && selectCommand.result.length > 0) ? selectCommand.result[0].cnt : 0;
clearCache();
return cnt;
}
測試樣例代碼:
var c:Criteria=entityManager.createCriteria(IaUser);
c.addEqualsCondition("name", "張三");
var cnt:int=entityManager.fetchCriteriaCountResult(c) ;
users=entityManager.fetchCriteria(c)
下一篇博客將實現Criteria方式的具體分頁代碼...
posted on 2010-12-10 14:56
不做浮躁的人 閱讀(1337)
評論(0) 編輯 收藏 所屬分類:
air