坚持,坚定,坚强

博客园 首页 新随笔 联系 订阅 管理

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

 

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

posted on 2011-06-10 16:31  老公鸡  阅读(342)  评论(0编辑  收藏  举报