HQL | Introduction

原文:https://www.geeksforgeeks.org/hql-introduction/

简介

Hibernate 查询语言(HQL)是一种易于学习且功能强大的查询语言,作为面向对象的 SQL 扩展设计,弥补了面向对象系统和关系数据库之间的差距。HQL 语法与 SQL 语法非常相似。Hibernate ORM 提供了丰富而强大的面向对象查询语言,这是一种将对象映射到数据库的技术。来自面向对象系统的数据通过基于 SQL 的模式映射到关系数据库。

通过执行以下任务,HQL 还可用于通过操作系统映射从数据库中检索对象:

  • 对对象的属性应用限制
  • 使用 order by 子句排列查询返回的结果
  • 将结果分页
  • 使用 group by 和 having 子句聚合记录
  • 使用连接
  • 创建用户定义的函数
  • 执行子查询

Hibernate 查询语言被设计为 SQL 的“最小”面向对象扩展,它在 Java 类和数据库表之间提供了一个优雅的桥梁。因此,必须了解 HQL 在当前情况下的需求。

HQL 特色

HQL 查询不区分大小写;但是,Java 类和属性的名称区分大小写,HQL 用于对数据库执行查询。如果在应用程序中使用 HQL 来定义数据库查询,Hibernate 框架会自动生成 SQL 查询并执行它。与 SQL 不同,HQL 使用类和属性来代替表和列。HQL 支持多态性和关联,这反过来允许开发人员使用比 SQL 更少的代码编写查询。此外,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 由以下要素组成。

  • 子句(从、选择、在、排序依据、分组依据)
  • 关联和连接(内部连接、左外部连接、右外部连接、完全连接)
  • 聚合函数(平均值、总和、最小值、最大值、计数等))
  • 表达式(数学运算符、二进制比较、字符串连接、SQL 标量函数等。)
  • 子查询(任意、全部、部分、in)

HQL 查询

查询中的查询称为子查询,用括号括起来。子查询的一个例子是子选择,其中选择子句嵌入到另一个子句中,例如选择、来自、和 where 子句。子查询在主查询执行之前执行。

例如,以下查询返回所有出价小于 100 的项目。

从项目 100 >开始(从项目 b 中选择金额。投标 b)

要检索出价大于 100 的项目,可以使用以下查询:

从项目 100 <开始(从项目 b 中选择金额。投标 b)

如何跑 HQL

开发完 servlets、JSP 页面和配置文件后,应该将它们存储在 HibernateApplication 目录结构中的适当位置。创建一个网络存档(WAR)文件,并将其命名为 HibernateApplication.war。在 GlassFish V3 应用服务器上部署 HibernateApplication.war 文件。在 a 成功部署休眠应用程序后,执行以下步骤运行该应用程序:打开互联网浏览器网络浏览器并键入以下网址:

http://localhost:8080/hibernate application/my servlet