日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

nhibernate入门系列: 使用Criteria载入对象

發布時間:2025/7/14 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nhibernate入门系列: 使用Criteria载入对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nh會話提供一種使用表達式(就像SQL語句的where表達式)來載入數據的方法, 以取得滿足條件的對象集合。

通過CreateCriteria方法, 可以取得一個ICriteria接口, 這個接口用于操作表達式和排序字段. 由CriteriaImpl類實現,此類加有Internal修飾,因此不能在程序集外顯示創建, CreateCriteria方法需要一個要加載對象類型的參數.

這里列出ICriteria接口中的一些常用方法:

Add:加入條件表達式(Expression對象),此方法可多次調用以組合多個條件;
AddOrder:加入排序的字段(Order對象);
List:執行查詢, 返回滿足條件的對象集合。
SetMaxResults:設置返回的最大結果數,可用于分頁;
SetFirstResult:設置首個對象返回的位置,可用于分頁;
SetTimeout:設置操作的超時值,此值將傳遞給IDbCommand對象;

Expression(表達式)

Expression類是所有表達式類的祖先. 這是一個抽象(abstract)類, 同時也是一個類工廠(Factory Method模式), 用于創建派生的表達式對象, 用意是很明顯的, 隱藏了派生類的細節,使我們可通過一致的方法來創建表達式對象.

下面列出一些Expression中常用的方法:

Eq:得到一個相等判斷的表達式, 等同于 propertyName = value;
Gt:得到一個大于判斷的表達式, 等同于 propertyName > value;
Like:得到一個相似判斷的表達式, 等同于 propertyName like value;
And:得到兩個表達式And操作后的表達式, 等同于 expression1 and expression2;
Or:重到兩個表達式Or操作后的表達式, 等同于 expression1 or expression2;

更多的Expression請參考相關文檔或源代碼。

Order(排序)

Order類用于向ICriteria接口提供排序信息. 這個類提供了兩個靜態方法, 分別是Asc和Desc, 顧名思義就是創建升序和降序的Order對象.
例如要取得一個按更新日期(Updated)降序的Order對象, 使用Order.Desc("Updated")就可以了.

示例

下面以幾個例子來說明使用Criteria載入對象的用法:

1. 取得用戶名(Username)為billy的用戶對象:

? ?Expression ex = Expression.Eq( "Username", "billy" ); // ( Username = 'billy' )
???IList users = session.CreateCriteria(typeof(User)).Add( ex ).List();

2。取得用戶名(Username)為billy, 密碼(Password)為123456的用戶對象

???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. 取得數據中第20-40的用戶對象。

???ICriteria c = session.CreateCriteria(typeof(User));
?? IList users = c.SetFirstResult(20).SetMaxResults(20).List();

???對于SQLSERVER,數據定位采用的是IDataReader前滾至firstResult處,然后取maxResults條記錄.

4. 取得按注冊日期(Regdate)降序排序后的用戶對象.

???ICriteria c = session.CreateCriteria(typeof(User));
?? IList users = c.AddOrder( Order.Desc("Regdate") ).List();

使用Criteria加載數據的不足:

1. 當使用SetFirstResult和SetMaxResults限制返回的對象數時,無法得知對象的總數;
2. 當前版本不支持關聯查詢(hibernate好像可以);

總結

以上是生活随笔為你收集整理的nhibernate入门系列: 使用Criteria载入对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。