天天看點

使用iBatis和ObjectDataSource輕松實作分頁

ObjectDataSource 控件内置了對分頁的支援。我們需要設定 ObjectDataSource 的 EnablePaging屬性,然後要設定SelectMethod、SelectCountMethod 、StartRowIndexParameterName和MaximumRowsParameterName 屬性。當 EnablePaging 屬性設定為 true 時,SelectParameters 集合包含兩個額外的參數,一個用于請求的第一行,另一個用于請求的行數。這兩個參數的名稱由StartRowIndexParameterName 和 MaximumRowsParameterName 屬性定義。SelectMethod應該傳回從指定的索引處開始的請求的行數。因為資料可能不是按頁大小平均分割的,是以最後一頁可能包含較少的行。是以,請求的行數實際上是傳回的最大行數。

上面提及的後四個屬性的含義很容易了解,簡單的說,我們要實作兩個方法,一個是傳回總的記錄數(SelectCountMethod),一個則傳回目前請求頁的記錄(SelectMethod),SelectMethod方法至少要包含兩個參數,以指定欲請求記錄的起始索引和欲傳回的最大行數。

SelectCountMethod一般容易實作。而SelectMethod則比較麻煩,常見的解決方案是存儲過程,這樣的存儲過程通常與特定表緊密耦合,難以通用。

使用iBatis時,我們通過ISqlMapper接口來通路資料庫。其中的一個方法相當有用:

IList<T> QueryForList<T>(string statementName, object parameterObject, int skipResults, int maxResults);

前兩個參數作查詢之用,而後兩個參數則與ObjectDataSource的StartRowIndexParameterName 和 MaximumRowsParameterName 屬性的設計不謀而合!

這樣一來,我們就可以隻關注查詢本身了,把分頁功能交由iBatis和ObjectDataSource來打理。最重要的是,這個方法相當通用,也不需對查詢語句作額外的處理。

我的測試資料為20萬條,翻頁所需時間在0.7秒左右,效果很不錯了,大家有興趣可以嘗試下。

使用iBatis和ObjectDataSource輕松實作分頁

<b>本文轉自一個程式員的自省部落格園部落格,原文連結:http://www.cnblogs.com/anderslly/archive/2007/06/21/ibatisodspaging.html,如需轉載請自行聯系原作者。</b>

繼續閱讀