nhibernate入门系列: 使用Criteria载入对象
2009-03-18 14:47
274 查看
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好像可以);
通过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载入对象
- nhibernate入门系列: 使用Criteria载入对象
- nhibernate入门系列: 使用Criteria载入对象(转)
- nhibernate入门系列: 使用Criteria载入对象
- Java高级系列——使用所有对象的通用方法
- 第十一讲 : 类和对象的使用【天轰穿.Net4趣味编程系列视频教程-vs2010轻松学习C#】
- SharePoint【ECMAScript对象模型系列】-- 05. 使用ECMA操作列表对象(list)
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--何时使用Lambda 表达式?
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash) 推荐
- IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象
- Android深入浅出系列之实例应用—弹出消息Toast对象的使用自定义方式(二)
- ExcelVBA编程系列之对象模型(2):初步理解和使用Excel对象模型
- Git 系列(七):使用 Git 管理二进制大对象
- SilverLight 系列第二讲:使用Canvas对象
- Android深入浅出系列之实例应用—弹出消息Toast对象的使用纯文本方式(一)
- ios开发系列之使用NSDirectoryEnumerator的对象获得目录的资源列表
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- Hibernet DetachedCriteria 对象使用,Mark一下~
- Ehcache系列一:Ehcache 整合Spring 使用页面、对象缓存
- javaSE_8系列博客——Java语言的特性(三)--类和对象(10)--对象的使用