NHibernate学习 第六天 NHibernate 中的查询

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();

 

大家喜欢哪一种自己选择就行。

转载于:https://www.cnblogs.com/mullr2005/archive/2011/06/10/2077768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值