代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using DomainModel.Entities;
namespace HQL
{
public class QueryHQL
{
private ISession _session;
public ISession Session
{
set
{
_session = value;
}
}
public QueryHQL(ISession session)
{
_session = session;
}
#region 基本语法学习
/// <summary>
/// from子句:简单用法
/// </summary>
/// <returns></returns>
public IList<Customer> From()
{
//返回所有Customer类的实例
return _session.CreateQuery("from Customer")
.List<Customer>();
}
/// <summary>
/// from子句:使用别名
/// </summary>
/// <returns></returns>
public IList<Customer> FromAlias()
{
//返回所有Customer类的实例,Customer赋予了别名customer(as可以省略)
return _session.CreateQuery("from Customer as customer").List<Customer>();
}
/// <summary>
/// from子句:笛卡尔积
/// </summary>
/// <returns></returns>
public IList<Customer> FromCartesianproduct()
{
//出现多个类,或者分别使用别名,返回笛卡尔积,或者称为“交叉”连接。
return _session.CreateQuery("from Customer")
.List<Customer>();
}
/// <summary>
/// select子句:简单用法
/// </summary>
/// <returns></returns>
public IList<int> Select()
{
//返回在结果集中返回哪些对象和属性:返回所有Customer的CustomerId
return _session.CreateQuery("select c.CustomerId from Customer c")
.List<int>();
//注意:包括组件类型的属性select c.Name.Firstname from Customer c
}
/// <summary>
/// select子句:数组
/// </summary>
/// <returns></returns>
public IList<object[]> SelectObject()
{
//用Object[]的数组返回多个对象和/或多个属性,或者使用特殊的elements功能,注意一般要结合group by使用
return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
.List<object[]>();
}
/// <summary>
/// 统计函数
/// </summary>
/// <returns></returns>
public IList<object[]> AggregateFunction()
{
//用Object[]的数组返回属性的统计函数的结果
return _session.CreateQuery("select avg(c.CustomerId),sum(c.CustomerId),count(c) from Customer c")
.List<object[]>();
//注意:统计函数的变量也可以是集合count( elements(c.CustomerId) )
}
/// <summary>
/// Distinct用法
/// </summary>
/// <returns></returns>
public IList<string> Distinct()
{
//distinct和all关键字的用法和语义与SQL相同。
return _session.CreateQuery("select distinct c.Firstname from Customer c")
.List<string>();
}
/// <summary>
/// Where子句
/// </summary>
/// <returns></returns>
public IList<Customer> Where()
{
//where子句让你缩小你要返回的实例的列表范围
return _session.CreateQuery("select from Customer c where c.Firstname='YJing'")
.List<Customer>();
//where Order.Customer.Firstname is not null被翻译为带有一个表间(inner)join的SQL查询
//注意:where c.id=1 小写的id可以用来表示一个对象的惟一标识。(你可以使用它的属性名。)
//例如where Order.Customer.id=1 高效率,不需要进行表间连接
}
/// <summary>
/// Where子句:表达式
/// </summary>
/// <returns></returns>
public IList<Customer> WhereExpression()
{
return _session.CreateQuery("from Customer c where c.Firstname between 'A%' and 'Y%'")
.List<Customer>();
//或者如下
//from Customer c where c.Firstname not in ('YJing','Lee','li')
//from Customer c where c.Firstname.size > 0
}
/// <summary>
/// order by子句
/// </summary>
/// <returns></returns>
public IList<Customer> Orderby()
{
//查询返回的列表可以按照任何返回的类或者组件的属性排序
return _session.CreateQuery("select from Customer c order by c.Firstname asc,c.Lastname desc")
.List<Customer>();
//asc和desc是可选的,分别代表升序或者降序
}
/// <summary>
/// group by子句
/// </summary>
/// <returns></returns>
public IList<object[]> Groupby()
{
//查询返回的列表可以按照任何返回的类或者组件的属性分组
return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
.List<object[]>();
}
/// <summary>
/// 子查询
/// </summary>
/// <returns></returns>
public IList<Customer> Subquery()
{
return _session.CreateQuery("from Customer c where c.Lastname=some"
+"( select c.Lastname from Customer c)")
.List<Customer>();
}
#endregion
#region 实例学习
/// <summary>
/// 按Firstname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersByFirstname(string firstname)
{
//ISession _session = GetSession();
//写法1
//return _session.CreateQuery("select from Customer c where c.Firstname='" + firstname + "'").List<Customer>();
//写法2
//return _session.CreateQuery("select from Customer c where c.Firstname=?")
// .SetString(0, firstname)
// .List<Customer>();
//写法3
return _session.CreateQuery("select from Customer c where c.Firstname=:fn")
.SetString("fn", firstname)
.List<Customer>();
}
/// <summary>
/// 按Firstname和Lastname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <param name="lastname"></param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersByFirstnameAndLastname(string firstname, string lastname)
{
return _session.CreateQuery("select from Customer c where c.Firstname=:fn and c.Lastname=:ln")
.SetString("fn", firstname)
.SetString("ln", lastname)
.List<Customer>();
}
/// <summary>
/// 获取顾客ID大于CustomerId的顾客
/// </summary>
/// <param name="customerId">顾客ID</param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersWithCustomerIdGreaterThan(int customerId)
{
return _session.CreateQuery("select from Customer c where c.CustomerId > :cid")
.SetInt32("cid", customerId)
.List<Customer>();
}
public IList<string> GetDistinctCustomerFirstnames()
{
return _session.CreateQuery("select distinct c.Firstname from Customer c")
.List<string>();
}
public IList<Customer> GetCustomersOrderedByLastnames()
{
return _session.CreateQuery("select from Customer c order by c.Lastname")
.List<Customer>();
}
#endregion
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using DomainModel.Entities;
namespace HQL
{
public class QueryHQL
{
private ISession _session;
public ISession Session
{
set
{
_session = value;
}
}
public QueryHQL(ISession session)
{
_session = session;
}
#region 基本语法学习
/// <summary>
/// from子句:简单用法
/// </summary>
/// <returns></returns>
public IList<Customer> From()
{
//返回所有Customer类的实例
return _session.CreateQuery("from Customer")
.List<Customer>();
}
/// <summary>
/// from子句:使用别名
/// </summary>
/// <returns></returns>
public IList<Customer> FromAlias()
{
//返回所有Customer类的实例,Customer赋予了别名customer(as可以省略)
return _session.CreateQuery("from Customer as customer").List<Customer>();
}
/// <summary>
/// from子句:笛卡尔积
/// </summary>
/// <returns></returns>
public IList<Customer> FromCartesianproduct()
{
//出现多个类,或者分别使用别名,返回笛卡尔积,或者称为“交叉”连接。
return _session.CreateQuery("from Customer")
.List<Customer>();
}
/// <summary>
/// select子句:简单用法
/// </summary>
/// <returns></returns>
public IList<int> Select()
{
//返回在结果集中返回哪些对象和属性:返回所有Customer的CustomerId
return _session.CreateQuery("select c.CustomerId from Customer c")
.List<int>();
//注意:包括组件类型的属性select c.Name.Firstname from Customer c
}
/// <summary>
/// select子句:数组
/// </summary>
/// <returns></returns>
public IList<object[]> SelectObject()
{
//用Object[]的数组返回多个对象和/或多个属性,或者使用特殊的elements功能,注意一般要结合group by使用
return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
.List<object[]>();
}
/// <summary>
/// 统计函数
/// </summary>
/// <returns></returns>
public IList<object[]> AggregateFunction()
{
//用Object[]的数组返回属性的统计函数的结果
return _session.CreateQuery("select avg(c.CustomerId),sum(c.CustomerId),count(c) from Customer c")
.List<object[]>();
//注意:统计函数的变量也可以是集合count( elements(c.CustomerId) )
}
/// <summary>
/// Distinct用法
/// </summary>
/// <returns></returns>
public IList<string> Distinct()
{
//distinct和all关键字的用法和语义与SQL相同。
return _session.CreateQuery("select distinct c.Firstname from Customer c")
.List<string>();
}
/// <summary>
/// Where子句
/// </summary>
/// <returns></returns>
public IList<Customer> Where()
{
//where子句让你缩小你要返回的实例的列表范围
return _session.CreateQuery("select from Customer c where c.Firstname='YJing'")
.List<Customer>();
//where Order.Customer.Firstname is not null被翻译为带有一个表间(inner)join的SQL查询
//注意:where c.id=1 小写的id可以用来表示一个对象的惟一标识。(你可以使用它的属性名。)
//例如where Order.Customer.id=1 高效率,不需要进行表间连接
}
/// <summary>
/// Where子句:表达式
/// </summary>
/// <returns></returns>
public IList<Customer> WhereExpression()
{
return _session.CreateQuery("from Customer c where c.Firstname between 'A%' and 'Y%'")
.List<Customer>();
//或者如下
//from Customer c where c.Firstname not in ('YJing','Lee','li')
//from Customer c where c.Firstname.size > 0
}
/// <summary>
/// order by子句
/// </summary>
/// <returns></returns>
public IList<Customer> Orderby()
{
//查询返回的列表可以按照任何返回的类或者组件的属性排序
return _session.CreateQuery("select from Customer c order by c.Firstname asc,c.Lastname desc")
.List<Customer>();
//asc和desc是可选的,分别代表升序或者降序
}
/// <summary>
/// group by子句
/// </summary>
/// <returns></returns>
public IList<object[]> Groupby()
{
//查询返回的列表可以按照任何返回的类或者组件的属性分组
return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname")
.List<object[]>();
}
/// <summary>
/// 子查询
/// </summary>
/// <returns></returns>
public IList<Customer> Subquery()
{
return _session.CreateQuery("from Customer c where c.Lastname=some"
+"( select c.Lastname from Customer c)")
.List<Customer>();
}
#endregion
#region 实例学习
/// <summary>
/// 按Firstname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersByFirstname(string firstname)
{
//ISession _session = GetSession();
//写法1
//return _session.CreateQuery("select from Customer c where c.Firstname='" + firstname + "'").List<Customer>();
//写法2
//return _session.CreateQuery("select from Customer c where c.Firstname=?")
// .SetString(0, firstname)
// .List<Customer>();
//写法3
return _session.CreateQuery("select from Customer c where c.Firstname=:fn")
.SetString("fn", firstname)
.List<Customer>();
}
/// <summary>
/// 按Firstname和Lastname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <param name="lastname"></param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersByFirstnameAndLastname(string firstname, string lastname)
{
return _session.CreateQuery("select from Customer c where c.Firstname=:fn and c.Lastname=:ln")
.SetString("fn", firstname)
.SetString("ln", lastname)
.List<Customer>();
}
/// <summary>
/// 获取顾客ID大于CustomerId的顾客
/// </summary>
/// <param name="customerId">顾客ID</param>
/// <returns>顾客列表</returns>
public IList<Customer> GetCustomersWithCustomerIdGreaterThan(int customerId)
{
return _session.CreateQuery("select from Customer c where c.CustomerId > :cid")
.SetInt32("cid", customerId)
.List<Customer>();
}
public IList<string> GetDistinctCustomerFirstnames()
{
return _session.CreateQuery("select distinct c.Firstname from Customer c")
.List<string>();
}
public IList<Customer> GetCustomersOrderedByLastnames()
{
return _session.CreateQuery("select from Customer c order by c.Lastname")
.List<Customer>();
}
#endregion
}
}