前面介绍了如何使用配置AR,一些简单的操作以及常见几种映射关系的实现,今天我们就来讲一下HQL,前段时间我在博客园上看有人介绍NHibernate的时候说"HQL是NHibernate中最激动人心的部分",这话确实不错,它同样也是AR中最激动人心的部分(个人感觉),HQL看起来很像SQL语句,但实质完全不一样,它是一种完全的面向对象的查询语言,全称Hibernate Query Language,通过HQL我们可以实现一些比较复杂的查询.
那么什么才能称之为HQL语句呢?如下:
这就是一个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:
2、Custom Query(自定义查询)
使用这种查询首先要添加对NHibernate和Nullables这两个程序集的引用。然后我们要为我们所使用的查询定义一个参数类,这个类必须继承ActiveRecordBaseQuery类并且要override Execute方法(或实现IActiveRecordQuery接口也可)。使用方法如下,以查询某个类别的单位为例,首先定义参数类:
3.Execute CallBack
这种查询方式和CustomQuery差不多,只不过不需要再添加一个参数类了.使用方法如下:
以上代码在VS2003中调试通过.
关于ActiveRecord的HQL就说这么多.以上资料参考:http://www.castleproject.org/index.php/ActiveRecord:Using_HQL
希望能与园子里的朋友多多交流.
Email:pwei013@163.com