nhibernate入门系列: 使用Criteria载入对象
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载入对象相关推荐
- 【JAVA零基础入门系列】Day14 Java对象的克隆
[JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...
- python面向对象教程_Python入门系列教程3-面向对象
课程咨询.获取课件.技术交流直接加入博学谷在线学习:631731828 课程简介 本课程是Python系列入门课程的第三阶段,该阶段我们会学习面向对象(OOP)这一重要的编程思想.学习的知识点主要包括 ...
- nhibernate入门系列: many-to-many映射
多对多关系在数据库也是比较常见的,它通过一个中间表将两个主表关联起来. 下面来看看多对多关联在nh的实现,示例是一个User和Group之间的多对多关联. 先来看看User类的映射信息: 在多对多定义 ...
- scala快速入门系列【伴生对象】
本篇作为scala快速入门系列的第二十篇博客,为大家带来的是关于伴生对象的内容. 文章目录 伴生对象 定义伴生对象 private [this] 访问权限 apply 方法 伴生对象 在Java中,经 ...
- C++编程入门系列之十四(类与对象:构造函数和析构函数)
C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...
- 【转】NHibernate入门教程
开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...
- 【原创】OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...
- Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
标 题: [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 作 者: CCDebuger 时 间: 2006-02-19,16:02:46 链 接: http://bbs.pediy. ...
最新文章
- python编程入门p-Python是什么?简单了解pythonp-入门
- 如何将本地jar包上传到maven私服中
- 响应式框架Bootstrap栅格系统
- oracle网卡,Oracle_bond网卡配置
- 由相机的自身参数求解内参矩阵
- 比目鱼搜索不能用了_win10搜索功能失效解决办法
- 每日一句20200119
- 微信小程序开发手机商城部分代码(不包括支付功能)
- asp.net中英文转换
- 做正确的事永远都不迟
- VMware esxi 阵列卡驱动下载
- 变更日志 批准的变更请求 收尾流程 原型法 名义小组 习题
- 5G移动通信网的定位技术发展趋势
- 深入理解计算机系统家庭作业第四章(4.43-4.54)
- Win 10关机后电源灯不停闪烁的解决办法
- 微信小程序:父子组件的通信
- 优秀网页设计:35个吸引眼球的精美作品集网站
- 学生表、班级表、成绩表
- Altera timing analyzer理解
- LintCode Find the Duplicate Number