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好像可以);

nhibernate入门系列: 使用Criteria载入对象相关推荐

  1. 【JAVA零基础入门系列】Day14 Java对象的克隆

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  2. python面向对象教程_Python入门系列教程3-面向对象

    课程咨询.获取课件.技术交流直接加入博学谷在线学习:631731828 课程简介 本课程是Python系列入门课程的第三阶段,该阶段我们会学习面向对象(OOP)这一重要的编程思想.学习的知识点主要包括 ...

  3. nhibernate入门系列: many-to-many映射

    多对多关系在数据库也是比较常见的,它通过一个中间表将两个主表关联起来. 下面来看看多对多关联在nh的实现,示例是一个User和Group之间的多对多关联. 先来看看User类的映射信息: 在多对多定义 ...

  4. scala快速入门系列【伴生对象】

    本篇作为scala快速入门系列的第二十篇博客,为大家带来的是关于伴生对象的内容. 文章目录 伴生对象 定义伴生对象 private [this] 访问权限 apply 方法 伴生对象 在Java中,经 ...

  5. C++编程入门系列之十四(类与对象:构造函数和析构函数)

    C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...

  6. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

  7. 【原创】OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

    标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...

  8. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  9. OllyDBG 入门系列(五)-消息断点及 RUN 跟踪

    标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...

最新文章

  1. python编程入门p-Python是什么?简单了解pythonp-入门
  2. 如何将本地jar包上传到maven私服中
  3. 响应式框架Bootstrap栅格系统
  4. oracle网卡,Oracle_bond网卡配置
  5. 由相机的自身参数求解内参矩阵
  6. 比目鱼搜索不能用了_win10搜索功能失效解决办法
  7. 每日一句20200119
  8. 微信小程序开发手机商城部分代码(不包括支付功能)
  9. asp.net中英文转换
  10. 做正确的事永远都不迟
  11. VMware esxi 阵列卡驱动下载
  12. 变更日志 批准的变更请求 收尾流程 原型法 名义小组 习题
  13. 5G移动通信网的定位技术发展趋势
  14. 深入理解计算机系统家庭作业第四章(4.43-4.54)
  15. Win 10关机后电源灯不停闪烁的解决办法
  16. 微信小程序:父子组件的通信
  17. 优秀网页设计:35个吸引眼球的精美作品集网站
  18. 学生表、班级表、成绩表
  19. Altera timing analyzer理解
  20. LintCode Find the Duplicate Number

热门文章

  1. 【bzoj5082】弗拉格 矩阵乘法
  2. Java创建线程的方式
  3. 20145309信息安全系统设计基础第3周学习总结
  4. Javascript typeof用法
  5. shell中$0,$?,$!等的特殊用法
  6. Android的沉浸式状态栏与变色状态栏详解
  7. Android适配难题全面总结
  8. linux下防火墙iptables原理及使用
  9. Mac搭建本地svn服务器,并用Cornerstone连接服务器
  10. 查看Linux服务器网卡流量小脚本shell和Python各一例