使用Nhibernate进行查询

NHibernate 中提供了三种查询方式

1 NHibernate 查询语言(HQL)

2条件查询(Criteria API, Query ByExample(QBE)
3原生 SQL(Literal SQL, T-SQL、 PL/SQL)

NHibernate 查询语言(HQL)

NHibernate 查询语言(HQL, NHibernate Query Language)是 NHibernate 特有的基于面向对象的 SQL 查询语言,它具有继承、多态和关联等特性。实际上是用 OOP 中的对象和属性映射了数据库中的表和列

例如

select n.Title from News n

在SQL里面News是表 Title是列

但是在HQL里面News是对象 Title是对象News的属性。

HQL 不区分大小写

下面我们分别来介绍基础语法: from 子句, select 子句, where 子句, order by 子句, group by
子句

from和select子句

和SQL类似

1 返回所有的数据

public IList<News> GetAll ()
{
  return session.CreateQuery("from News").List<News>();
}Code language: PHP (php)

别名的使用

public IList<News> FromAlias()

        {       

            return session.CreateQuery("from News as xinwen").List<News>();

        }Code language: PHP (php)

select子句

在结果集中返回指定的对象和属性

public IList<int> Select()

        {

            return session.CreateQuery("select n.ID from News n").List<int>();

        }Code language: PHP (php)

返回多个实体属性用object数组列表

用 Object[]的数组返回多个对象和/或多个属性,或者使用特殊的 elements 功能,
注意一般要结合 group by 使用。

public IList<object[]> SelectObject()
        {
            return session.CreateQuery("select n.Title, count(n.Title) from News n group by n.Title").List<object[]>();
        }
Code language: PHP (php)

统计函数:用 Object[]的数组返回属性的统计函数的结果,注意统计函数的变量也可以
是集合 count(elements(n.ID))

public IList<object[]> AggregateFunction()
        {
            return session.CreateQuery("select avg(n.ID),sum(n.ID), count(n) from News n").List<object[]>();
        }
Code language: PHP (php)

Distinct 用法: distinct 和 all 关键字的用法和语义与 SQL 相同。

实例:获取不同 Title

public IList<string> Distinct()
        {
            return session.CreateQuery("select distinct n.Title from News n").List<string>();
        }
Code language: PHP (php)

测试

private void button2_Click(object sender, EventArgs e)
        {
            var res = newsDal.GetAll();
            var res1 = newsDal.FromAlias();
            var res2 = newsDal.Select();
            var res3 = newsDal.SelectObject();
            var res4 = newsDal.AggregateFunction();
            var res5 = newsDal.Distinct();
        }
Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注