明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

nhibernate數(shù)據(jù)加載之Criteria加載

[摘要]Criteria是通過一組條件表達式(Expression)來加載數(shù)據(jù)的,它返回滿足條件的對象集合。主要接口為ICriteria,實現(xiàn)為CriteriaImpl類,此類加有Internal修飾,因此不能在程序集外顯示創(chuàng)建,nhibernate在session對象中為我們提供了一個方法CreateC...
Criteria是通過一組條件表達式(Expression)來加載數(shù)據(jù)的,它返回滿足條件的對象集合。

主要接口為ICriteria,實現(xiàn)為CriteriaImpl類,此類加有Internal修飾,因此不能在程序集外顯示創(chuàng)建,
nhibernate在session對象中為我們提供了一個方法CreateCriteria,此方法返回ICriteria接口。

這里列出了ICriteria接口的一些方法:
SetMaxResults:設置返回的最大結(jié)果數(shù),可用于分頁;
SetFirstResult:設置首個對象返回的位置,可用于分頁;
SetTimeout:設置操作的超時值,此值將傳遞給IDbCommand對象;
Add:加入條件表達式(Expression對象),此方法可多次調(diào)用以組合多個條件;
AddOrder:加入排序的字段(Order對象);
List:返回滿足條件的對象集合。

Criteria數(shù)據(jù)加載的關鍵就在Expression對象上,此對象組成了查詢語句的where部分。

Expression是一個abstract(抽象)類,它通過一組static方法實現(xiàn)Factory Method(工廠方法)模式,這些static方法返回的都是Expression類的子類,下面列出一些常用的:

Eq:返回EqExpression,這是一個相等判斷的表達式;
Like:返回LikeExpression,這是一個like判斷的表達式;
Gt:返回GtExpression,這是一個大于判斷的表達式;
And:返回AndExpression,這是兩個表達式And操作后的表達式;
Or:返回OrExpression,這是兩個表達式Or操作后的表達式;

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

下面以幾個例子來說明Criteria數(shù)據(jù)加載的用法:

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

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

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

??? Expression ex = Expression.And( Expression.Eq("Username", "billy"),
??? Expression.Eq("Password", "123456") );
??? IList users = session.CreateCriteria(type(User)).Add( ex ).List();

3. 取得數(shù)據(jù)中第20-40的用戶對象。

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

對于SQLSERVER,數(shù)據(jù)定位采用的是IDataReader前滾至firstResult處,然后取maxResults條記錄。

Criteria數(shù)據(jù)加載的不足:
1. 當使用SetFirstResult和SetMaxResults限制返回的對象數(shù)時,無法得知對象的總數(shù);
2. 當前版本不支持關聯(lián)查詢(hibernate好像可以);