📜  HQL |介绍

📅  最后修改于: 2021-10-21 05:04:40             🧑  作者: Mango

介绍

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

通过执行以下任务,HQL 还可用于通过 O/R 映射从数据库中检索对象:

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

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 相比,支持许多高级功能,例如分页、使用动态分析的 fetch join(可以使用单个 select 语句初始化关联或值与其父对象的集合)、内部/外部/完全连接和笛卡尔积.它还支持投影、聚合(max、avg)、分组、排序、子查询和 SQL函数调用。
  • 提供数据库独立性。 HQL 有助于编写独立于数据库的查询,这些查询在运行时转换为数据库的本机 SQL 语法。这种方法有助于使用本机 SQL 查询提供的附加功能。

    HQL 语法

    HQL 被认为是最强大的查询语言,设计为 SQL 的最小面向对象扩展。 HQL 查询易于理解并使用持久类和属性名称,而不是表和列名称。 HQL 由以下元素组成。

    • 条款(FROM、Select、Where、Order by、Group by)
    • 关联和联接(内联接、左外联接、右外联接、完全联接)
    • 聚合函数(avg、sum、min、max、count等)
    • 表达式(数学运算符、二进制比较、字符串连接、SQL 标量函数等)
    • 子查询(任何,所有,一些,在)

    HQL 查询

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

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

    from Item item where 100>all(从 item.bids b 中选择 b.amount)

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

    from Item item where 100

    如何运行 HQL

    在开发 servlet、JSP 页面和配置文件之后,您应该将它们存储在 HibernateApplication 目录结构中的适当位置。创建一个 Web Archive (WAR) 文件并将其命名为 HibernateApplication.war 。在 GlassFish V3 应用服务器上部署 HibernateApplication.war 文件。成功部署 HibernateApplication 后,执行以下步骤以运行该应用程序: 打开 Internet Explorer Web 浏览器并键入以下 URL:
    http://localhost:8080/HibernateApplication/Myservlet