JDBC VS 休眠 [已关闭]

2022-09-01 08:46:40

我们在 Web 应用程序中使用 JDBC 已经有很长一段时间了。我们使用它的主要原因是因为我们100%控制代码,sql和修复东西。除此之外,我们在数据库中使用了触发器,数据库由数据库专家单独开发。

然而,许多人现在建议使用,所以我们也考虑使用它。但是,我们发现了以下问题。Hibernate

  1. 休眠无法连接到“现有”数据库。它总是试图创建一个自己的。

  2. 我们的数据库可能通过位于不同平台(云,服务器,VPS,个人计算机)中的同一应用程序进行访问。休眠可能会产生问题,因为它在这种情况下会缓存。

  3. 我们从不喜欢将“表创建工作”交给java代码。我们始终手动创建表。

  4. 我们可能不得不使用非常长和复杂的SQL语句。上次我们使用一个包含 150 多行的语句,连接了 20 多个表。我们怀疑在Hibernate方面我们是否会遇到麻烦。

  5. 我们的SQL代码很好,很标准。休眠生成的代码对我们来说似乎有点脏。

  6. 我们总是使用MySQL。切勿使用任何其他数据库。

  7. 我们创建的应用程序需要与医疗相关的最大安全性。如果至少有一条数据记录被泄露,我们就完成了。

  8. 数据库中有很多,,等。在论坛上,有些人抱怨Hibernate搞砸了这些。foreign keysPrimary KeysComposite KeysUnique Keys

  9. 我们决定尝试休眠,因为有些人声称,“你们是软件工程师吗?您正在使用已经死!!."JDBC

考虑到这些,请让我知道上述观点是否真的正确(正如我所说,我通过谷歌搜索,讨论等了解它们)。而且,Hibernate VS Java JDBC的优缺点是什么?


答案 1

回答上面列出的问题:

1. 休眠无法连接到“现有”数据库。它总是试图创建一个自己的。

这是错误的。休眠可以连接到现有数据库,并且它并不总是尝试重新创建它。您只需要转动参数,例如.hbm2ddl. auto

2.我们的数据库可能通过位于不同平台(云,服务器,VPS,个人计算机)中的同一应用程序进行访问。休眠可能会产生问题,因为它在这种情况下会缓存。

休眠有一个可调节的缓存,所以这也不是问题。

3.我们从来不喜欢把“表创建工作”交给java代码。我们始终手动创建表。

没关系。见上文第1页。此外,还有几个方便的用于间接表创建和更新的库(例如liquibase),可以与休眠完美地结合使用。

4. 我们可能不得不使用非常长和复杂的 SQL 语句。上次我们使用一个包含 150 多行的语句,连接了 20 多个表。我们怀疑在Hibernate方面我们是否会遇到麻烦。

您始终可以使用直接 JDBC 调用,并通过休眠调用本机 SQL 查询(如果它是 neeeded)。

5.我们的SQL代码很好,很标准。休眠生成的代码对我们来说似乎有点脏。

同样,如果您必须调用一些逻辑复杂的SQL代码而不是休眠自动生成 - 您可以这样做。

6. 我们总是使用 MySQL。切勿使用任何其他数据库。

根本不是问题。Hibernate具有特殊的MySQL方言支持:.org.hibernate.dialect.MySQLDialect

7.我们创建的应用程序需要与医疗相关的最大安全性。如果至少有一条数据记录被泄露,我们就完成了。

安全问题与 ORM 技术无关。 只是纯数据库JDBC调用和程序员工具之间的逻辑和方便的面向对象层。它不会以某种方式影响常见的网络安全性。Hibernate


答案 2

Hibernate是一个很棒的工具,你会发现很多关于它的文档,书籍和博客文章。

我将解决您的所有问题:

休眠无法连接到“现有”数据库。它总是试图创建自己的一个。

休眠应该使用单独的数据库模式管理过程,即使对于集成测试也是如此。您应该使用像 FlywayDB 这样的增量版本控制工具来管理架构更改。

我们的数据库可能通过位于不同平台(云,服务器,VPS,个人计算机)中的同一应用程序进行访问。休眠可能会产生问题,因为它在这种情况下会缓存。

您不必使用第二级缓存,它使用第三方缓存实现。所有缓存解决方案都可能破坏事务一致性。第一级缓存保证了会话级可重复读取,并且通过乐观锁定,您可以防止丢失更新

我们从不喜欢将“表创建工作”交给java代码。我们始终手动创建表。

数据库应与 ORM 工具分开。无论如何,这是一个最佳实践。

我们可能不得不使用非常长和复杂的SQL语句。上次我们使用一个包含 150 多行的语句,连接了 20 多个表。我们怀疑在Hibernate方面我们是否会遇到麻烦。

休眠非常适合写入操作和并发控制。您仍然需要对高级查询(窗口函数、CTE)使用本机 SQL。但是Hibernate允许您运行本机查询。

我们的SQL代码很好,很标准。休眠生成的代码对我们来说似乎有点脏。

你不需要,你可能不应该使用hbmdll实用程序。

我们总是使用MySQL。切勿使用任何其他数据库。

那就更好了。因此,您可以使用高级本机查询,而无需考虑数据库可移植性问题。

我们创建的应用程序需要与医疗相关的最大安全性。如果至少有一条数据记录被泄露,我们就完成了。

休眠不会阻止您保护数据库或数据访问代码。您仍然可以在Hibernate上使用数据库安全措施。您甚至可以使用 Jasypt 来启用各种与安全相关的功能:

  • 高级密码哈希
  • 双向加密

数据库中有很多外键,主键,复合键,唯一键等。在论坛上,有些人抱怨Hibernate搞砸了这些。

所有这些都由Hibernate支持。除了JPA约定之外,Hibernate还为任何奇异映射提供了特定的映射。

我们决定尝试休眠,因为有些人声称,“你们是软件工程师吗?您正在使用已经死亡的 JDBC !!."

这不是从您已经掌握的库进行切换的正确论据。如果您认为您可以从使用Hibernate中受益,那么这是从JDBC切换的唯一令人信服的理由。


推荐