日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nhibernate入门系列: 使用Criteria载入对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

通過CreateCriteria方法, 可以取得一個(gè)ICriteria接口, 這個(gè)接口用于操作表達(dá)式和排序字段. 由CriteriaImpl類實(shí)現(xiàn),此類加有Internal修飾,因此不能在程序集外顯示創(chuàng)建, CreateCriteria方法需要一個(gè)要加載對(duì)象類型的參數(shù).

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

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

Expression(表達(dá)式)

Expression類是所有表達(dá)式類的祖先. 這是一個(gè)抽象(abstract)類, 同時(shí)也是一個(gè)類工廠(Factory Method模式), 用于創(chuàng)建派生的表達(dá)式對(duì)象, 用意是很明顯的, 隱藏了派生類的細(xì)節(jié),使我們可通過一致的方法來創(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類用于向ICriteria接口提供排序信息. 這個(gè)類提供了兩個(gè)靜態(tài)方法, 分別是Asc和Desc, 顧名思義就是創(chuàng)建升序和降序的Order對(duì)象.
例如要取得一個(gè)按更新日期(Updated)降序的Order對(duì)象, 使用Order.Desc("Updated")就可以了.

示例

下面以幾個(gè)例子來說明使用Criteria載入對(duì)象的用法:

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

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

2。取得用戶名(Username)為billy, 密碼(Password)為123456的用戶對(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的用戶對(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)降序排序后的用戶對(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)查詢(hibernate好像可以);

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。