前面介绍了如何使用配置AR,一些简单的操作以及常见几种映射关系的实现,今天我们就来讲一下HQL,前段时间我在博客园上看有人介绍NHibernate的时候说"HQL是NHibernate中最激动人心的部分",这话确实不错,它同样也是AR中最激动人心的部分(个人感觉),HQL看起来很像SQL语句,但实质完全不一样,它是一种完全的面向对象的查询语言,全称Hibernate Query Language,通过HQL我们可以实现一些比较复杂的查询.
    那么什么才能称之为HQL语句呢?如下:

ActiveRecord学习(四):HQL应用From Company

   这就是一个HQL语句,它相当于这样的SQL语句:Select * Form Company,即查询所有的单位信息.HQL也可以想SQL里那样使用别名,使用聚合函数等等.它支持的聚合函数如下:
1.求平均值:avg()
2.求和:sum()
3.最大值和最小值:max(),min()
4.求记录数:count()
等等......
值得注意的是:HQL语句是区分大小写的,因为它查询面向的是对象,而我们定义对象的C#语言是区分大小写的。
更详细的关于HQL的资料请参考:http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html
   下面来说一下ActiveRecord里提供的几种查询方式:
1、SimpleQuery和ScalarQuery
  二者都是直接处理HQL语句的简单查询,没有复杂的参数处理,区别是:SimpleQuery返回值是一个集合,而ScalarQuery返回的是单一值,具体用法祥见下面的代码:
SimpleQuery:
ActiveRecord学习(四):HQL应用//HQL的用法,和NHibernate中差不多,但在返回值的处理上比NHibernate中做的好
ActiveRecord学习(四):HQL应用
        public static Company[] FindByName(string cname)
        }
ScalarQuery:
ActiveRecord学习(四):HQL应用//得到单位个数
ActiveRecord学习(四):HQL应用
        public static int GetCompanyNumber()
        }

2、Custom Query(自定义查询)
 使用这种查询首先要添加对NHibernate和Nullables这两个程序集的引用。然后我们要为我们所使用的查询定义一个参数类,这个类必须继承ActiveRecordBaseQuery类并且要override Execute方法(或实现IActiveRecordQuery接口也可)。使用方法如下,以查询某个类别的单位为例,首先定义参数类:
ActiveRecord学习(四):HQL应用using System;
ActiveRecord学习(四):HQL应用
using Castle.ActiveRecord;
ActiveRecord学习(四):HQL应用
using Castle.ActiveRecord.Queries;
ActiveRecord学习(四):HQL应用
using NHibernate;
ActiveRecord学习(四):HQL应用
ActiveRecord学习(四):HQL应用
namespace AR.Model
}
调用方法如下:
ActiveRecord学习(四):HQL应用public static Company[] GetCompanyListByType(string type)
        }


3.Execute CallBack

 这种查询方式和CustomQuery差不多,只不过不需要再添加一个参数类了.使用方法如下:

ActiveRecord学习(四):HQL应用public static Company[] GetCompanyListByType(string type)
        }

以上代码在VS2003中调试通过.
关于ActiveRecord的HQL就说这么多.以上资料参考:http://www.castleproject.org/index.php/ActiveRecord:Using_HQL
希望能与园子里的朋友多多交流.
Email:pwei013@163.com

相关文章: