【问题标题】:What exactly does HIbernate do if it uses JDBC itself如果 HIbernate 使用 JDBC 本身,它究竟做了什么
【发布时间】:2019-04-08 03:25:44
【问题描述】:

我是 Hibernate 的初学者,在学习它时,我发现了它在幕后使用 JDBC 的概念。如果是这样,那么 Hibernate 到底有什么用?我知道它的优点,如 HQL、注释、ORM 功能等。那么在幕后工作的总是 JDBC 吗? JDBC 和 Hibernate 各自的职责是什么?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:
    • Hibernate 做 ORM 层
      • 将对象映射到 SQL 语句
      • 将 SQL 查询结果(以ResultSets 的形式)映射到对象
    • JDBC 进行数据库连接
      • 向数据库发送 SQL 语句
      • 将查询结果读取为ResultSets
    • 数据库
      • 执行 SQL 语句更新数据
      • 执行SQL语句查询数据
      • 管理数据和索引

    请务必注意,不同的数据库(MySQL、Oracle、MSSQL、Postgres、H2、HSQLDB、Apache DB)具有不同的驱动程序实现,因此需要不同的 JDBC 驱动程序。如果不使用 JDBC,Hibernate 需要自己实现这些驱动程序。

    【讨论】:

      【解决方案2】:

      它为我们提供了哪些我们应该寻找的优势。

      1.) 缓存机制:如果您的应用程序使用大量静态数据,那么缓存将是一个不错的选择,并且 hibernate 透明地支持缓存。

      2.) 管理会话、事务等

      3.) 减少编写查询的工作,更多的 Hibernate 实用程序,如 Query API、Criteria API、HQL

      4.) 开发人员的生产力:查询性能本身通常比手动编码的查询更差,因为它无法针对每个特定情况进行优化。 Hibernate 通过使用缓存很好地弥补了这一点。

      5.) 数据库更改:如果您更改数据库,例如将 MySQL 更改为 Oracle,并且如果您使用 Hibernate,则无需更改任何实现代码。但是,如果您使用原始 JDBC 和原始查询而不是 JPA 或 HQL,那么您必须更改更多查询。因为原始查询可能会根据数据库供应商的实施而改变。

      Hibernate 是一个非常庞大的解决方案,具有数据持久性和 ORM,包括 JPA 实现。此外,在 Hibernate 中定义了许多方法来管理实体、如何持久化、事务等。在 Hibernate 中,您可以使用 SQL、HQL 或 java 注释。 JDBC 模板只是一个简单的工具,可以帮助您管理 SQL 查询和事务。最好将其描述为 JDBC 包装器或帮助器。如果您更喜欢自己管理数据库查询 (SQL),或者您是初学者,那么使用 Spring JdbcTemplate 将帮助您了解它的工作原理。即使您正在开发更大的应用程序,也请考虑使用 Hibernate。请注意 Hibernate 的学习曲线。

      总的来说,如果您在一个相对较小的项目中工作,您也可以使用 JDBC,但是在中大型项目中,使用一些 ORM 解决方案总是有帮助的,不一定是 Hibernate。 同样对于大型项目,我们使用连接池从数据库获取连接。还有更多像 c3p0 这样的连接池库。

      【讨论】:

        猜你喜欢
        • 2017-09-02
        • 2012-07-23
        • 2016-09-10
        • 2023-03-15
        • 2012-10-17
        • 2021-06-04
        • 1970-01-01
        • 2018-07-30
        • 2019-10-06
        相关资源
        最近更新 更多