iBATIS分頁(yè)實(shí)例中ObjectDataSource的應(yīng)用淺析
iBATIS分頁(yè)實(shí)例中ObjectDataSource的應(yīng)用首先讓我們來看看屬性方面的特點(diǎn),ObjectDataSource 控件內(nèi)置了對(duì)分頁(yè)的支持。我們需要設(shè)置 ObjectDataSource 的 EnablePaging屬性,然后要設(shè)置SelectMethod、SelectCountMethod 、StartRowIndexParameterName和MaximumRowsParameterName 屬性。當(dāng) EnablePaging 屬性設(shè)置為 true 時(shí),SelectParameters 集合包含兩個(gè)額外的參數(shù),一個(gè)用于請(qǐng)求的第一行,另一個(gè)用于請(qǐng)求的行數(shù)。這兩個(gè)參數(shù)的名稱由StartRowIndexParameterName 和 MaximumRowsParameterName 屬性定義。SelectMethod應(yīng)該返回從指定的索引處開始的請(qǐng)求的行數(shù)。因?yàn)閿?shù)據(jù)可能不是按頁(yè)大小平均分割的,所以最后一頁(yè)可能包含較少的行。因此,請(qǐng)求的行數(shù)實(shí)際上是返回的最大行數(shù)。
上面提及的后四個(gè)屬性的含義很容易理解,簡(jiǎn)單的說,我們要實(shí)現(xiàn)兩個(gè)方法,一個(gè)是返回總的記錄數(shù)(SelectCountMethod),一個(gè)則返回當(dāng)前請(qǐng)求頁(yè)的記錄(SelectMethod),SelectMethod方法至少要包含兩個(gè)參數(shù),以指定欲請(qǐng)求記錄的起始索引和欲返回的最大行數(shù)。
SelectCountMethod一般容易實(shí)現(xiàn)。而SelectMethod則比較麻煩,常見的解決方案是存儲(chǔ)過程,這樣的存儲(chǔ)過程通常與特定表緊密耦合,難以通用。
使用iBATIS時(shí),我們通過ISqlMapper接口來訪問數(shù)據(jù)庫(kù)。其中的一個(gè)方法相當(dāng)有用:
- IList<T> QueryForList<T>(string statementName, object parameterObject, int skipResults, int maxResults);
前兩個(gè)參數(shù)作查詢之用,而后兩個(gè)參數(shù)則與ObjectDataSource的StartRowIndexParameterName 和 MaximumRowsParameterName 屬性的設(shè)計(jì)不謀而合!
這樣一來,我們就可以只關(guān)注查詢本身了,把分頁(yè)功能交由iBatis和ObjectDataSource來打理。最重要的是,這個(gè)方法相當(dāng)通用,也不需對(duì)查詢語(yǔ)句作額外的處理。
我的測(cè)試數(shù)據(jù)為20萬(wàn)條,翻頁(yè)所需時(shí)間在0.7秒左右,效果很不錯(cuò)了,大家有興趣可以嘗試下。
iBATIS分頁(yè)實(shí)例中ObjectDataSource的應(yīng)用就介紹到這里,希望通過本文的介紹使你對(duì)iBATIS分頁(yè)實(shí)例中ObjectDataSource的應(yīng)用有所更高的了解。
【編輯推薦】