如何在 Hibernate 和 JDBC 之间进行选择?

Posted

技术标签:

【中文标题】如何在 Hibernate 和 JDBC 之间进行选择?【英文标题】:How to choose between Hibernate and JDBC? 【发布时间】:2012-01-03 07:10:40 【问题描述】:

我必须开发一个 Java EE 项目。在阅读了有关 JDBC 和 Hibernate 的不同教程后,我感到很困惑。

阅读这些教程后,我发现它们各有利弊。现在的问题是我如何决定哪一个是最好的?另外,我想知道一般我会为哪种类型的项目使用 JDBC,以及我会为哪种类型的项目使用 Hibernate。

使用我在单个表中有 100.000 条记录的测试应用程序,我注意到使用 JDBC 时,我可以在 3 到 4 秒内获取所有记录。当我使用 Hibernate 时,需要 12 到 14 秒。

为什么 Hibernate 的性能会差这么多,如何才能将 Hibernate 的性能提高到接近 JDBC 的性能?

【问题讨论】:

IMO 这完全取决于项目/应用程序,如果您遵循 DDD(域驱动设计),那么休眠将更适合您,您可以以最佳方式利用它,另一方面,如果您的应用程序是一种批处理应用程序(或者您手头有数据库设计),那么纯 jdbc 比休眠或任何其他 ORM 更好 【参考方案1】:

我不是休眠方面的专家,尽管我只是指出了几点为什么我更喜欢休眠而不是简单的 jdbc。

我在一个maven项目中使用了带有JPA注解的hibernate

    您可以创建所有模型并使用注释定义关系。然后运行一个 maven 命令根据我的模型创建整个关系数据库、表和关系。这样可以节省大量时间

    李>

    Hibernate 会在后台根据您的 getter 和 setter 将结果集转换为模型。与 jdbc 不同,您不必自己将结果集提取到模型中。再次节省了大量时间

    Hibernate 通常会急切地获取所有关系对象。因此您不必费心编写连接查询。(您始终可以指定是否要急切获取/延迟获取)

4.有保存、更新、删除的方法,您可以将模型实例作为参数传递

因此,如果您打算编写一个随时间增长的 Java EE 项目,并且您想节省一些时间来编写额外的类,您可以选择 Hibernate。所有这些都来自我的小经验。但是在 hibernate 中你可以做的还有很多。请参考 hibernate 文档

【讨论】:

【参考方案2】:

好吧,无论您从事哪种类型的项目,Hibernate 总能让您的生活更轻松。这使数据库操作更接近您的域模型。您使用 java 类的约定查询数据库,就像您如何访问 java 中的字段一样,为什么您可以在查询中指定字段(而不是输入 SQL 并且每次输入查询时都需要交叉检查哪个字段被映射哪个列名)。此外,hibernate 将在命中数据库查询后返回域对象,如果您查看 JDBC,您必须自己构建所有这些东西,这总是有帮助的。

总的来说,如果您在一个相对较小的项目中工作,您也可以使用 JDBC,但在中大型项目中,使用一些 ORM 解决方案总是有帮助的,而不必使用 Hibernate。

【讨论】:

当我在一个单一的表中有十万个记录时使用测试应用程序。我注意到使用 JDBC 我在 3 秒内获取所有记录。当我使用休眠时它需要 12 到 14 秒。那么休眠是面糊。/???【参考方案3】:

这不是“非此即彼”的情况。除了 Hibernate,还有很多有趣的 ORM solutions。除非您有特别密集的数据库算法,否则我不太关心性能。您应该考虑学习曲线和源代码的可维护性。我的 ORM 库力求简单的学习曲线和最少的编程:sormula

【讨论】:

以上是关于如何在 Hibernate 和 JDBC 之间进行选择?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate概念初探

请说说你对Hibernat的理解?JDBC和Hibernate各有什么优势和劣势?

如何使用 JDBC 处理 DAO 之间的交互? [复制]

Hibernate笔记一:HIbernate配置-HelloWorld

hibernate和jdbc的区别 优缺点

hibernate中的query 如何能象jdbc中的resultset一样使用