介绍
Hibernate Query Language(HQL)是一种易于学习且功能强大的查询语言,旨在作为SQL的面向对象扩展,从而弥合了面向对象系统和关系数据库之间的鸿沟。 HQL语法与SQL语法非常相似。它具有Hibernate ORM提供的丰富而强大的面向对象查询语言,这是一种将对象映射到数据库的技术。来自面向对象系统的数据通过基于SQL的架构映射到关系数据库。
通过执行以下任务,HQL还可以用于通过O / R映射从数据库检索对象:
- 将限制应用于对象的属性
- 使用order by子句安排查询重新调整的结果
- 分页结果
- 通过使用group by和having子句汇总记录
- 使用联接
- 创建用户定义的函数
- 执行子查询
Hibernate查询语言被设计为SQL的“最小”面向对象扩展,在Java类和数据库表之间架起了一座优雅的桥梁。因此,必须了解当前情况下的HQL需求。
HQL的特点
HQL查询不区分大小写;但是, Java类和属性的名称区分大小写。HQL用于对数据库执行查询。如果在应用程序中使用HQL定义数据库查询,则Hibernate框架会自动生成并执行SQL查询。与SQL不同,HQL使用类和属性代替表和列。 HQL支持多态性和关联性,与SQL相比,HQL允许开发人员使用更少的代码编写查询。此外,HQL支持许多其他SQL语句和聚合函数,例如sum()和max()以及子句,例如group by和order by。
需要HQL
使用HQL代替本地SQ从数据库检索数据更有利。以下是为什么HQL优于SQL的一些原因:
- 为关系操作提供全面支持。可以使用HQL中的对象形式来表示SQL查询,该对象使用类和属性而不是表和列。
- 返回结果作为对象。换句话说,查询结果是对象形式,而不是纯文本形式。这些对象可用于操纵或检索应用程序中的数据。这样就无需显式创建对象并从执行查询所检索到的结果集中填充数据。
- 支持多态查询。多态查询将返回查询结果以及所有子对象(子类的对象)(如果有)。
- 易于学习和使用。 HQL的语法与SQL的语法非常相似。这使Hibernate查询易于学习并在应用程序中实现。
- 与SQL相比,它支持许多高级功能,例如分页,具有动态概要分析的访存联接(可以使用单个select语句初始化与父对象的值的关联或集合),内部/外部/完全联接以及笛卡尔积。它还支持投影,聚合(最大,平均),分组,排序,子查询和SQL函数调用。
- 提供数据库独立性。 HQL帮助编写独立于数据库的查询,这些查询在运行时转换为数据库的本机SQL语法。这种方法有助于使用本机SQL查询提供的其他功能。
HQL语法
HQL被认为是最强大的查询语言,被设计为SQL的最小面向对象扩展。 HQL查询易于理解,并使用持久类和属性名,而不是表名和列名。 HQL由以下元素组成。
- 线索(FROM,选择,位置,排序依据,分组依据)
- 关联和联接(内部联接,左外部联接,右外部联接,完全联接)
- 汇总函数(平均,总和,最小值,最大值,计数等)
- 表达式(数学运算符,二进制比较,字符串连接,SQL标量函数等)
- 子查询(任何,所有,一些,输入)
HQL查询
查询中的查询称为子查询,并用括号括起来。子查询的一个示例是subselect,其中将select子句嵌入到另一个子句中,例如select,from和where子句。子查询在执行主查询之前执行。
例如,以下查询返回所有出价均小于100的项目。
从100>全部的项目项中(从item.bids b中选择b.amount)
要检索出价大于100的项目,可以使用以下查询:
从项目项中得到100 <全部(从item.bids b中选择b.amount)
如何运行HQL
开发完servlet,JSP页面和配置文件后,应将它们存储在HibernateApplication目录结构中的适当位置。创建一个Web存档(WAR)文件,并将其命名为HibernateApplication.war。在GlassFish V3应用程序服务器上部署HibernateApplication.war文件。成功部署HibernateApplication之后,请执行以下步骤来运行该应用程序:打开Internet Explorer Web浏览器并键入以下URL:
http:// localhost:8080 / HibernateApplication / Myservlet