Hibernate HQL介绍

来源:互联网 发布:linux luajit 编辑:程序博客网 时间:2024/05/29 13:59

       HQL(Hibernate Query Language)。传统的SQL语言采用的是结构化的查询方法,而这种方法对于对象形式存在的数据却无能为力。为此,Hibernate为我们提供了一种语法类似SQL的语言,这既是HQL(Hibernate查询语言),和SQL不同的是,HQL是一种面向对象的查询语言,它可以查询以对象形式存在的数据。
SQL本身是非常强大的查询语言。当SQL拥有处理面向对象数据的能力相结合,就出出现了HQL。和SQL语言一样,HQL提供了丰富的查询功能。例如投影查询、聚合函数、分组和约束。任何复杂的SQL都可以映射成HQL。

【转载使用,请注明出处:http://blog.csdn.net/mahoking
      ORM框架是建立在面向对象的基础上的。最好的体现是Hibernate提供了类SQL查询。虽然HQL的语法类似SQL,但其实际的查询目标是对象。所以HQL拥有面向对象语言的所有的特性,这其中包括多态、继承和组合。这样普通的SQL就具有了面向对象的特性,而且为了提供更强大的功能,HQL还提供了很多的查询函数。
这些函数可以分为四类:
1、 投影函数
       投影,就是一个可以访问的对象或对象的属性。HQL,通过使用from和select子句来完成。
from子句返回指定的类的所有实例。如from User将返回User类的所有实例。换言之,对应的SQL为:

select * from user;

from是最简单的查询语句。From后面可以跟一个或多个类名(类名可以带别名),如以下代码所示:

from User as u,Rose as r;

2、 约束函数
       投影返回的是所有的数据,但是大多数的情况下我们并不需要这么多的数据。这时我们就需要对数据进行过滤。HQL采用的过滤数据的子句和SQL一样是where。它的语法类似于SQL,如以下代码所示:
HQL语句

select User as u where u.id = 1978;

SQL语句

select user  u where u.id = 1978;

       以上两条语句使用的where子句很相似,而它们唯一的不同是SQL操作的是记录,而HQL操作的是对象。在HQL中,除了where子句可以过滤数据外,having子句也可以完成这个功能。投影和约束是两个基本的操作,这两个操作再加上聚合函数的话,那HQL将变得更加强大。

3、 聚合函数
       上述的查询都是将每个记录(对象)当做一个单位,而如果使用聚合,可以将一类记录(对象)当做一个单位。然后再对每一类的记录(对象)进行一系列的操作。例如对某列取平均值、求和、统计行数等等。HQL支持的聚集函数:
(1)avg(…),sum(…)
(2)min(…),max(…)
(3)count(*),count(…),count(distinct…),count(all…)
       我们要按products表的id统计price小于amount的平均数的产品数量,HQL语句如下:

select count(p) from Product p having p.price < avg(amount) group by p.id;

4、 分组函数
      分组操作的是行的集合。它根据某一列(属性)对记录集进行分组。这一切是通过group子句实现的。如下的例子描述了group子句的一般用法。

select count(o) from Order o having o.priceTotal >= 1200 and o.priceTotal <= 3200 group by o.id

      HQL中的分组和SQL中的分组类似。总之,除了一些对SQL的特殊扩展外,其它所有的SQL功能都可以使用HQL描述。

 

【转载使用,请注明出处:http://blog.csdn.net/mahoking




1 0
原创粉丝点击