public IList<Customer> GetAllHql()
{
IList<Customer> result = null;
ISession session = _sessionManager.GetSession(); try
{ result = session.CreateQuery("from Customer").List<Customer>();
}
catch (Exception)
{
throw;
}
finally
{
session.Close();
} return result;
}

注意:

result = session.CreateQuery("from Customer").List<Customer>();

Customer是类名,而不是数据库表名。

这正是Nhibernate的好处:屏蔽对数据库的底层操作,直接面向对象(实体类)编程。

实例:
         public IList<Customer> GetAllCustomers_HQL(){
return session.CreateQuery("from Customer c").List<Customer>();
} public IList<int> GetCustomerId_HQL() {
return session.CreateQuery("select c.CustomerId from Customer c").List<int>();
} public IList<Object[]> GetCustomerInfo_HQL() {
return session.CreateQuery("select c.FirstName,count(c.FirstName) from Customer c group by c.FirstName").List<Object[]>();
} public IList<Object[]> AggregateFunction()
{
return session.CreateQuery("select avg(c.CustomerId),sum(c.CustomerId),count(c) from Customer c")
.List<Object[]>();
} public IList<String> Distinct_HQL() {
return session.CreateQuery("select distinct c.FirstName from Customer c").List<String>();
} public IList<Customer> Where_HQL() {
return session.CreateQuery("from Customer c where c.FirstName='aaaa'").List<Customer>();
} public IList<Customer> Where_HQL(String firstname)
{
String hql = String.Format("from Customer c where c.FirstName='{0}'",firstname);
return session.CreateQuery(hql).List<Customer>();
} public IList<Customer> WhereLike_HQL(String firstname)
{
String hql = String.Format("from Customer c where c.FirstName like'%{0}%'", firstname);
return session.CreateQuery(hql).List<Customer>();
} public IList<Customer> WhereLike_HQL2(String firstname)
{
String hql = "from Customer c where c.FirstName like ?";
return session.CreateQuery(hql).SetString(,"%"+firstname+"%").List<Customer>();
} public IList<Customer> WhereLike_HQL3(String firstname)
{
String hql = "from Customer c where c.FirstName like :fname";
return session.CreateQuery(hql).SetString("fname", "%" + firstname + "%").List<Customer>();
} public IList<Customer> OrderBy_HQL() {
return session.CreateQuery("from Customer c order by c.FirstName asc,c.LastName desc").List<Customer>();
} //查询下定单的客户信息
public IList<Customer> InnerJoin_HQL()
{
string hql = "select distinct a from Customer a inner join a.Orders b ";
return session.CreateQuery(hql).List<Customer>();
} //public IList<Customer> UseCriteriaAPI_GetCustomersWithOrders(DateTime orderDate)(){
// return null;
//} //查询下定单的客户信息()
public IList<Customer> InnerJoin_HQL(String orderDate)
{
string hql = "select distinct a from Customer a inner join a.Orders b where b.OrderDate>:orderDate";
return session.CreateQuery(hql).SetString("orderDate",orderDate).List<Customer>();
}
------------------------------------------------------------------------------
HQL查询返回不规则对象:
        /// <summary>
/// HQL返回不规则对象
/// </summary>
/// <param name="orderDate"></param>
/// <returns></returns>
public IList<Object[]> GetObjectByHQL(String orderDate)
{
//Object的成员依次是Customer,OrderDate
string hql = "select distinct a,b.OrderDate from Customer a " +
"inner join a.Orders b where b.OrderDate=:orderDate";
return _session.CreateQuery(hql)
.SetString("orderDate", orderDate)
.List<Object[]>();
}

Object的成员依次是Customer,OrderDate,
            IList<Object[]> objects = customerService.GetObjectByHQL(order1.OrderDate.ToString());

            foreach (var objectse in objects)
{
Console.WriteLine("{0}---{1}",
((Customer)objectse[]).CustomerId,
objectse[objectse.Length-].ToString());
}
调用者必须知道Object的成员及其类型,才能正确使用查询结果,这样很不好。
改进的做法是:
创建一个类Object的成员类型,将HQL返回不规则对象转化为通用对象,减低调用着使用的的复杂度
    public class HQLQueryResult
{
public Customer Customer { get; set; }
public DateTime OrderDate { get; set; }
}
        /// <summary>
/// 将HQL返回不规则对象转化为通用对象,减低调用着使用的的复杂度
/// </summary>
/// <param name="orderDate"></param>
/// <returns></returns>
public IList<HQLQueryResult> GetObjectByHQLAndTransferToEasyObject(String orderDate)
{
List<HQLQueryResult> results = new List<HQLQueryResult>();
//Object的成员依次是Customer,OrderDate
string hql = "select distinct a,b.OrderDate from Customer a " +
"inner join a.Orders b where b.OrderDate=:orderDate";
IList<Object[]> objects =_session.CreateQuery(hql).SetString("orderDate", orderDate).List<Object[]>();
foreach (var objectse in objects)
{
HQLQueryResult tmp = new HQLQueryResult()
{
Customer= ((Customer)objectse[]),
OrderDate = (DateTime)objectse[objectse.Length - ]
}; results.Add(tmp);
}
return results;
}

调用者可以这要调用:

            IList<HQLQueryResult> objects = customerService.GetObjectByHQLAndTransferToEasyObject(order1.OrderDate.ToString());

            foreach (var objectse in objects)
{
Console.WriteLine("{0}---{1}",
objectse.Customer.CustomerId,
objectse.OrderDate.ToString());
}
 

 

01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询的更多相关文章

  1. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  2. 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题

    此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的 ,可报废此文,特此声明. NHibernate--Save方法: Cu ...

  3. 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询

    相关资料: http://www.cnblogs.com/lyj/archive/2008/10/29/1322373.html 问题的提出: 1.延迟加载,可能会引起session已经关闭的异常,例 ...

  4. 01-04-03【Nhibernate (版本3.3.1.4000) 出入江湖】Criteria API关联查询

    Criteria API关联查询 如果说HQL查询还有需要了解点SQL语法知识,并不是完全彻底面向对象查询, 那么Criterial API就是完全面向对象的查询方式. public IList< ...

  5. 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制

    Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...

  6. 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试

    相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...

  7. 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性

    父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...

  8. 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...

  9. 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...

随机推荐

  1. 理解C#系列 / 结束

    结束 开始写的原因 因为不知道自己有多牛. 因为需要一个备忘录. 因为要把知识梳理清楚,以便机器学习. 结束写的原因 因为想知道自己有多牛,不是把知识统统都摆出来,而是运用知识去做出东西来. 即将开发 ...

  2. 嵌入式 linux 移植修改后的libjpeg 实现内存中解码

    1.修改libjpeg源码,使之实现内存解码. 修改libjpeg中读取或者输出jpeg文件的函数接口文件jdatadst.c和jdatasrc.c见下面这篇帖子. http://blog.163.c ...

  3. Jquery 学习一

    一.jQuery概述 1.Javascript代码库 在早期的项目开发中都是使用Javascript原生代码,一行一行编写.但是Javascript自身存在3个弊端: ① 复杂的DOM操作 ② 不一致 ...

  4. 非常难得的iPad版房地产售楼助手应用

    一款高质量的iPad房地产售楼助手应用,采用的是类似facebook,新浪微博,腾讯微博,人人网的布局视图.功能有:客户管理系统(可添加,编辑等):2.房源管理系统;3.房贷计算器等,这个应用无论是布 ...

  5. 字符串反转(StringBuffer)

    package com.java1234.chap03.sec08; public class zifufanzhuan { public static void main(String[] args ...

  6. 《Java核心技术与最佳实践》读书笔记

    第一章 Java7新语法 1.switch中使用字符串 2.增加二进制表示0b10101010:数字字面量允许直径使用下划线12_34_90 3.一个catch字句捕获多个异常,多个异常之间用|分隔 ...

  7. 用CSS实现Firefox 和IE 都支持的Alpha透明效果

    有的时候,为了实现一些特殊效果,需要将页面元素变透明,本文介绍的就是用 CSS 实现 Firefox 和 IE 都支持的 Alpha 透明效果.CSS: filter:alpha(opacity=50 ...

  8. 而在Jquery中则使用$.map()、$.each()来操作数组

    首先是普通的数组(索引为整数的数组): //$.map(arr,fn); //对数组中的每个元素调用fn函数逐个进行处理,fn函数将处理返回最后得到的一个新的数组 var arr = [9, 8, 7 ...

  9. Nginx之负载均衡

    转自:http://www.360doc.com/content/13/1114/12/7694408_329125489.shtml 注,大家可以看到,由于我们网站是发展初期,nginx只代理了后端 ...

  10. 局域网实现 yum

    1 安装squid代理 ##### . 安装squid yum -y remove squid yum -y install squid ##### . 修改配置文件 vi /etc/squid/sq ...