nhibernate數(shù)據(jù)加載之Criteria加載
發(fā)表時(shí)間:2024-06-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Criteria是通過(guò)一組條件表達(dá)式(Expression)來(lái)加載數(shù)據(jù)的,它返回滿足條件的對(duì)象集合。主要接口為ICriteria,實(shí)現(xiàn)為CriteriaImpl類(lèi),此類(lèi)加有Internal修飾,因此不能在程序集外顯示創(chuàng)建,nhibernate在session對(duì)象中為我們提供了一個(gè)方法CreateC...
Criteria是通過(guò)一組條件表達(dá)式(Expression)來(lái)加載數(shù)據(jù)的,它返回滿足條件的對(duì)象集合。
主要接口為ICriteria,實(shí)現(xiàn)為CriteriaImpl類(lèi),此類(lèi)加有Internal修飾,因此不能在程序集外顯示創(chuàng)建,
nhibernate在session對(duì)象中為我們提供了一個(gè)方法CreateCriteria,此方法返回ICriteria接口。
這里列出了ICriteria接口的一些方法:
SetMaxResults:設(shè)置返回的最大結(jié)果數(shù),可用于分頁(yè);
SetFirstResult:設(shè)置首個(gè)對(duì)象返回的位置,可用于分頁(yè);
SetTimeout:設(shè)置操作的超時(shí)值,此值將傳遞給IDbCommand對(duì)象;
Add:加入條件表達(dá)式(Expression對(duì)象),此方法可多次調(diào)用以組合多個(gè)條件;
AddOrder:加入排序的字段(Order對(duì)象);
List:返回滿足條件的對(duì)象集合。
Criteria數(shù)據(jù)加載的關(guān)鍵就在Expression對(duì)象上,此對(duì)象組成了查詢語(yǔ)句的where部分。
Expression是一個(gè)abstract(抽象)類(lèi),它通過(guò)一組static方法實(shí)現(xiàn)Factory Method(工廠方法)模式,這些static方法返回的都是Expression類(lèi)的子類(lèi),下面列出一些常用的:
Eq:返回EqExpression,這是一個(gè)相等判斷的表達(dá)式;
Like:返回LikeExpression,這是一個(gè)like判斷的表達(dá)式;
Gt:返回GtExpression,這是一個(gè)大于判斷的表達(dá)式;
And:返回AndExpression,這是兩個(gè)表達(dá)式And操作后的表達(dá)式;
Or:返回OrExpression,這是兩個(gè)表達(dá)式Or操作后的表達(dá)式;
更多的Expression請(qǐng)參考相關(guān)文檔或源代碼。
下面以幾個(gè)例子來(lái)說(shuō)明Criteria數(shù)據(jù)加載的用法:
1. 取得用戶名(username)為billy的用戶對(duì)象:
??? Expression ex = Expression.Eq( "Username", "billy" );
??? IList users = session.CreateCriteria(typeof(User)).Add( ex ).List();
2。取得用戶名(username)為billy, 密碼為123456的用戶對(duì)象
??? 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的用戶對(duì)象。
??? IList users = session.CreateCriteria(typeof(User))
???????????????????????????? .SetFirstResult(20).SetMaxResults(40)
???????????????????????????? .List();
對(duì)于SQLSERVER,數(shù)據(jù)定位采用的是IDataReader前滾至firstResult處,然后取maxResults條記錄。
Criteria數(shù)據(jù)加載的不足:
1. 當(dāng)使用SetFirstResult和SetMaxResults限制返回的對(duì)象數(shù)時(shí),無(wú)法得知對(duì)象的總數(shù);
2. 當(dāng)前版本不支持關(guān)聯(lián)查詢(hibernate好像可以);