nhibernate入门系列: 使用Criteria载入对象
nh會(huì)話(huà)提供一種使用表達(dá)式(就像SQL語(yǔ)句的where表達(dá)式)來(lái)載入數(shù)據(jù)的方法, 以取得滿(mǎn)足條件的對(duì)象集合。
通過(guò)CreateCriteria方法, 可以取得一個(gè)ICriteria接口, 這個(gè)接口用于操作表達(dá)式和排序字段. 由CriteriaImpl類(lèi)實(shí)現(xiàn),此類(lèi)加有Internal修飾,因此不能在程序集外顯示創(chuàng)建, CreateCriteria方法需要一個(gè)要加載對(duì)象類(lèi)型的參數(shù).
這里列出ICriteria接口中的一些常用方法:
Add:加入條件表達(dá)式(Expression對(duì)象),此方法可多次調(diào)用以組合多個(gè)條件;
AddOrder:加入排序的字段(Order對(duì)象);
List:執(zhí)行查詢(xún), 返回滿(mǎn)足條件的對(duì)象集合。
SetMaxResults:設(shè)置返回的最大結(jié)果數(shù),可用于分頁(yè);
SetFirstResult:設(shè)置首個(gè)對(duì)象返回的位置,可用于分頁(yè);
SetTimeout:設(shè)置操作的超時(shí)值,此值將傳遞給IDbCommand對(duì)象;
Expression(表達(dá)式)
Expression類(lèi)是所有表達(dá)式類(lèi)的祖先. 這是一個(gè)抽象(abstract)類(lèi), 同時(shí)也是一個(gè)類(lèi)工廠(chǎng)(Factory Method模式), 用于創(chuàng)建派生的表達(dá)式對(duì)象, 用意是很明顯的, 隱藏了派生類(lèi)的細(xì)節(jié),使我們可通過(guò)一致的方法來(lái)創(chuàng)建表達(dá)式對(duì)象.
下面列出一些Expression中常用的方法:
Eq:得到一個(gè)相等判斷的表達(dá)式, 等同于 propertyName = value;
Gt:得到一個(gè)大于判斷的表達(dá)式, 等同于 propertyName > value;
Like:得到一個(gè)相似判斷的表達(dá)式, 等同于 propertyName like value;
And:得到兩個(gè)表達(dá)式And操作后的表達(dá)式, 等同于 expression1 and expression2;
Or:重到兩個(gè)表達(dá)式Or操作后的表達(dá)式, 等同于 expression1 or expression2;
更多的Expression請(qǐng)參考相關(guān)文檔或源代碼。
Order(排序)
Order類(lèi)用于向ICriteria接口提供排序信息. 這個(gè)類(lèi)提供了兩個(gè)靜態(tài)方法, 分別是Asc和Desc, 顧名思義就是創(chuàng)建升序和降序的Order對(duì)象.
例如要取得一個(gè)按更新日期(Updated)降序的Order對(duì)象, 使用Order.Desc("Updated")就可以了.
示例
下面以幾個(gè)例子來(lái)說(shuō)明使用Criteria載入對(duì)象的用法:
1. 取得用戶(hù)名(Username)為billy的用戶(hù)對(duì)象:
? ?Expression ex = Expression.Eq( "Username", "billy" ); // ( Username = 'billy' )
???IList users = session.CreateCriteria(typeof(User)).Add( ex ).List();
2。取得用戶(hù)名(Username)為billy, 密碼(Password)為123456的用戶(hù)對(duì)象
???Expression ex = Expression.And(
???????Expression.Eq("Username", "billy"),
???????Expression.Eq("Password", "123456")
???); // ( Username='billy' and Password='123456' )
???IList users = session.CreateCriteria(type(User)).Add( ex ).List();
3. 取得數(shù)據(jù)中第20-40的用戶(hù)對(duì)象。
???ICriteria c = session.CreateCriteria(typeof(User));
?? IList users = c.SetFirstResult(20).SetMaxResults(20).List();
???對(duì)于SQLSERVER,數(shù)據(jù)定位采用的是IDataReader前滾至firstResult處,然后取maxResults條記錄.
4. 取得按注冊(cè)日期(Regdate)降序排序后的用戶(hù)對(duì)象.
???ICriteria c = session.CreateCriteria(typeof(User));
?? IList users = c.AddOrder( Order.Desc("Regdate") ).List();
使用Criteria加載數(shù)據(jù)的不足:
1. 當(dāng)使用SetFirstResult和SetMaxResults限制返回的對(duì)象數(shù)時(shí),無(wú)法得知對(duì)象的總數(shù);
2. 當(dāng)前版本不支持關(guān)聯(lián)查詢(xún)(hibernate好像可以);
總結(jié)
以上是生活随笔為你收集整理的nhibernate入门系列: 使用Criteria载入对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 全flash站制作剖析
- 下一篇: 防火墙x86架构和ASIC架构和NP架构