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

原创 2007年09月12日 18:32:00
通过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从入门到精通系列(4)——持久对象的生命周期(上)

内容摘要     持久对象的状态的概念     持久对象的状态Demo     一、持久对象的状态的概念     在NHibernate中有三种状态,对它的深入理解,才能...

NHibernate从入门到精通系列(9)——一对多关联映射

内容摘要     单向关联映射     双向关联映射     一、单向关联映射   1.1 单向关联映射的描述   让我们回顾一下之前讲的《多对一关联映射》,如图1...

NHibernate从入门到精通系列(6)——基本映射

内容摘要   映射定义概括   基本映射常用标签   NHibernate的类型     一、映射定义概括   1.1 映射定义(Mapping declarati...

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法条件查询(Criteria Query) 1.创建ICriteria实例2.结果集限制3.结果集排序4.一些说明 根据示例查询(Query By...

NHibernate中Criteria查询表达式(各种条件查询方法) 添加,修改,删除

Criteria查询表达式:   正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制。   ...

NHibernate说探——Criteria条件查询

条件查询 NHibernate.ICriteria接口表示特定持久类的一个查询。ISession是 ICriteria实例的工厂。   这里以Northwind数据库为示例数据库 示例数据表:...

NHibernate查询之HQL&Criteria

一、什么是HQL(NHibernate Query Language)查询语言 Ø    定义:NHibernate查询语言(HQL,NHibernate Query Language)是N...
  • bestlxm
  • bestlxm
  • 2011年08月16日 19:35
  • 2041

Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o

Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o   1. Criteria,,Criterion ,, 1 2. 主要的对象黑头配置磊个关...
  • attilax
  • attilax
  • 2014年09月28日 21:29
  • 1657

使用hibernate的criteria分页查询后得到数组对象

前几日使用了hibernate的级联查询,

NHibernate使用入门(三)

全文检索–查询数据NHibernate.config配置文件
  • WuLex
  • WuLex
  • 2016年08月31日 14:39
  • 569
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nhibernate入门系列: 使用Criteria载入对象
举报原因:
原因补充:

(最多只允许输入30个字)