您的位置:首页 > 其它

NHibernate学习 第六天 NHibernate 中的查询

2011-06-10 16:31 363 查看
NHibernate 里面有三种查询方式,分别为

1. 原始SQL语句查询,使用方法为

session.CreateSQLQuery("select Id, u_name, u_pwd, r_id from users").AddEntity(typeof(User)).List<User>();

使用 CreateSQLQuery()方法来实现,在里面有许多要注意的地方。 比如 不能直接调用.List<User>()方法返回值等。

这边有找一个介绍比较详细的网页来讲明就不重复了

http://blog.csdn.net/faye0412/archive/2009/09/26/4596218.aspx

大家可以在这里找到你需要的

2. HQL 查询

使用CreateQuery()方法来实现, HQL 是LINQ的前身,语法类似

return session.CreateQuery("from User").List<User>();
注意:其中 from User 类似于t-SQL语句,User 为实体类名 如果需要使用字段则要换成属性名

http://zifengjiacan.blog.163.com/blog/static/43555122009229115355908/

嘿嘿,又偷懒了

3. Criteria查询

使用CreateCriteria()方法来实现,使用起来感觉挺好的,面向对象咯! 扩展方法的使用级限。《-- 纯个人感觉,不能面对考试以及面试

return session.CreateCriteria(typeof(User)).List<User>();

简单说明,详细请查看其它资料

SetMaxResults:设置返回的最大结果数,可用于分页;
SetFirstResult:设置首个对象返回的位置,可用于分页;
Add:加入条件表达式(expression_r对象),此方法可多次调用以组合多个条件;
AddOrder:加入排序的字段(Order对象);
List:返回满足条件的对象集合。

expression_r是一个abstract(抽象)类,它通过一组static方法实现Factory Method(工厂方法)模式,这些static方法返回的都是expression_r类的子类,下面列出一些常用的:
Eq:这是一个相等判断的表达式;
Like:这是一个like判断的表达式;
Gt:这是一个大于判断的表达式;
And:这是两个表达式And操作后的表达式;
Or:这是两个表达式Or操作后的表达式;
Between:这是一个范围筛选的条件表达式,在两个数之间的范围。
In:这也是一个范围筛选的条件表达式,在多个离散的值中进行筛选。
下面以几个例子来说明Criteria数据加载的用法:
1. 取得用户名(username)为billy的用户对象:
expression_r ex = expression_r.Eq( "Username", "billy" );
IList users = session.CreateCriteria(typeof(User)).Add( ex ).List();
2.取得用户名(username)为billy, 密码为123456的用户对象
expression_r ex = expression_r.And( expression_r.Eq("Username", "billy"),
expression_r.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条记录。
4. 取得按注册日期(Regdate)降序排序后的用户对象.
ICriteria c = session.CreateCriteria(typeof(User));
IList users = c.AddOrder( Order.Desc("Regdate") ).List();

大家喜欢哪一种自己选择就行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: