Hibernate HQL介绍

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

时间: 2024-08-10 04:45:25

Hibernate HQL介绍的相关文章

Hibernate HQL查询:

Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …

Hibernate HQL查询语句总结

Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的E

org.hibernate.hql.QueryExecutionRequestException:org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations【异常】

springData学习资料 [http://blog.csdn.net/lw_power/article/details/51296353] [JPA报错]org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hiberna

Exception in thread &quot;main&quot; org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User user where user.name=?0 and user.pass=?1] at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180

weblogic10异常:org.hibernate.hql.ast.HqlToken

转自:http://www.programgo.com/article/68682994452/ 在做查询的时候,报出  org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken这  个错误(是通过数据源连接的) 解决方法如下: 如果你是通过eclipse启动weblogic的,那么依次点击windows-preferences-myeclipse workbench-servers-

SSH整合报错:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped[......]

非常诡异的报错,信息如下:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select count(*) from User u where u.userName=? and u.userPassword=? ]Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped类似的报错信息的解决方法,

Rhythmk 学习 Hibernate 09 - Hibernate HQL

1.初始数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Test     public void test01() {         Session session = null;         try {             session = HibernateUtil.getSessionFactory().openSession();             session.begin

hibernate hql 大全

hibernate hql 大全 http://blog.chinaunix.net/article.php?articleId=47942&blogId=1655 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询

Java学习笔记-Hibernate HQL查询

Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session有关Session由SessionFactory创建,是线程安全的Thread-Safe,可以让多个线程同时存取SessionFactory而不会有数据共享的问题 Hibernate中Session的解释 :http://blog.csdn.net/shrek_xu/arti