nhibernate数据加载之Criteria加载

加载|数据

Criteria是通过一组条件表达式(Expression)来加载数据的,它返回满足条件的对象集合。

主要接口为ICriteria,实现为CriteriaImpl类,此类加有Internal修饰,因此不能在程序集外显示创建,
nhibernate在session对象中为我们提供了一个方法CreateCriteria,此方法返回ICriteria接口。

这里列出了ICriteria接口的一些方法:
SetMaxResults:设置返回的最大结果数,可用于分页;
SetFirstResult:设置首个对象返回的位置,可用于分页;
SetTimeout:设置操作的超时值,此值将传递给IDbCommand对象;
Add:加入条件表达式(Expression对象),此方法可多次调用以组合多个条件;
AddOrder:加入排序的字段(Order对象);
List:返回满足条件的对象集合。

Criteria数据加载的关键就在Expression对象上,此对象组成了查询语句的where部分。

Expression是一个abstract(抽象)类,它通过一组static方法实现Factory Method(工厂方法)模式,这些static方法返回的都是Expression类的子类,下面列出一些常用的:

Eq:返回EqExpression,这是一个相等判断的表达式;
Like:返回LikeExpression,这是一个like判断的表达式;
Gt:返回GtExpression,这是一个大于判断的表达式;
And:返回AndExpression,这是两个表达式And操作后的表达式;
Or:返回OrExpression,这是两个表达式Or操作后的表达式;

更多的Expression请参考相关文档或源代码。

下面以几个例子来说明Criteria数据加载的用法:

1. 取得用户名(username)为billy的用户对象:

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

2。取得用户名(username)为billy, 密码为123456的用户对象

??? Expression ex = Expression.And( Expression.Eq("Username", "billy"),
??? Expression.Eq("Password", "123456") );
??? IList users = session.CreateCriteria(type(User)).Add( ex ).List();

3. 取得数据中第20-40的用户对象。

??? IList users = session.CreateCriteria(typeof(User))
???????????????????????????? .SetFirstResult(20).SetMaxResults(40)
???????????????????????????? .List();

对于SQLSERVER,数据定位采用的是IDataReader前滚至firstResult处,然后取maxResults条记录。

Criteria数据加载的不足:
1. 当使用SetFirstResult和SetMaxResults限制返回的对象数时,无法得知对象的总数;
2. 当前版本不支持关联查询(hibernate好像可以);

时间: 2024-08-20 22:24:13

nhibernate数据加载之Criteria加载的相关文章

ajax 动态加载数据提示没有更多内容加载了

问题描述 ajax 动态加载数据提示没有更多内容加载了 怎么判断所有的数据已经加载完毕,提示没有更多内容加载了? if(data=='') 这个判断有误,求高人指点 解决方案 如果是分页你自己服务器端计算好总页数赋值给js变量,然后js设置一个当前页变量,每次加载后和总量对比就好了,干么多请求一次服务器由服务器返回空内容来控制是否加载完呢.. 解决方案二: 不知道你想问什么,data是什么?你的返回值怎么判断没有内容了.你的判断有误怎么得出的结论?有误的时候data什么值 解决方案三: data

求助,在线等,java+ssm项目初始化数据问题解析json文件加载到数据库,跪谢!

问题描述 求助,在线等,java+ssm项目初始化数据问题解析json文件加载到数据库,跪谢! 服务器能不能在启动的时候加载json文件 然后把数据 加载到数据库!就是启动服务器,然后启动成功后,数据库要看到有基本数据的效果,可以实现吗?在线等!跪谢!

RecyclerView 的数据加载 包括分页加载 和刷新加载 头尾部的提示处理

问题描述 RecyclerView 的数据加载 包括分页加载 和刷新加载 头尾部的提示处理 RecyclerView 如何实现分页加载网络数据和刷新加载 头尾部的提示处理?

javascript-diiv点击时间数据加载中显示加载中图片加载完还原

问题描述 diiv点击时间数据加载中显示加载中图片加载完还原 <div class="lead-more" id="lead-more" style="margin-top: 120px;"><a href="javascript:;">查看更多>></a></div> $(document).ready(function(){ $("#lead-more&

如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间?

问题描述 如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间? 问题补充:lizhi92574 写道 解决方案 Ext.data.Connection.prototype.timeout='9000';设置ajax请求时间默认30秒解决方案二:对解决方案三:你加载多大的数据居然超时了?

EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

原文:EF如何操作内存中的数据以及加载相关联表的数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说

javascript图片懒加载与预加载的分析

   预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染.  两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载.懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力.  懒加载的意义及实现方式有:    意义: 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数.    实现方式:       1.第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟.     2.第二种是条件加载,符合某些条件,或触发

javascript 文件的同步加载与异步加载

原文:[转载]javascript 文件的同步加载与异步加载   HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值. defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面body标签的底部,js脚本会在document的DOMContentLoaded之前执行.除IE和较新版本的Firefox外,其他浏览器并未支持. language: 已废弃.大部分浏览器会忽略该值. src: 可选.指定引入的外部

图片显示不全-android加载本地图片和加载网络图片出现花屏现象

问题描述 android加载本地图片和加载网络图片出现花屏现象 有时候出现有时候没有出现,我将加载后的图片房子viewpaper里面显示 解决方案 Android加载网络图片Android_开源框架_AndroidUniversalImageLoader网络图片加载Android_开源框架_AndroidUniversalImageLoader网络图片加载 解决方案二: 使用图片加载框架了吗 使用的什么方法加载的图片 是不是数据没有加载完整导致的 建议使用图片加载框架.