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)
Previous: 运行程序和遇到的一些异常
Next: where和order by使用