一般意义上的h2与hibernate和MySql之间的区别

Posted

技术标签:

【中文标题】一般意义上的h2与hibernate和MySql之间的区别【英文标题】:Difference between h2 vs hibernate and MySql in general sense 【发布时间】:2020-03-14 23:17:54 【问题描述】:

我在构建spring web时了解到H2,Hibernate。 早些时候,当我开发 android 应用程序时,我使用 sqlite 或 mysql 数据库。 在新平台上使用它们时,我对差异有点摸不着头脑 其中。

我目前的理解是:

H2和MySQL都是关系型数据库管理系统

Hibernate 是 orm(对象关系模型)

如果这三个可以在同一个应用程序中使用,我有点困惑 或者这三个不能同时使用。请理解清楚 英语和一个现实生活中的例子。TIA

【问题讨论】:

【参考方案1】:

是的,H2 和 MySQL 都是关系型数据库。

MySQL 是一个基于服务器的数据库 - 它作为独立于您的应用程序的进程运行,通常用于生产部署。

H2 是一个轻量级数据库,它可以完全在内存中运行,也可以在磁盘存储中运行,无论是在应用程序的进程(嵌入式)中还是在单独的进程中。它最常用于测试场景,恕我直言,不适合大多数生产应用程序。

Hibernate 是一种 ORM,只要您远离供应商特定的功能,它就可以将您的应用程序与您正在使用的特定数据库隔离开来。

在使用 Hibernate 和基于它构建的库时,在生产中使用独立数据库(如 MySQL)和在测试中使用嵌入式数据库(如 H2)是很常见的,两者之间只有一些配置文件发生变化。

由于您使用的是 Spring,因此可以说使用 Spring Data 和 JPA 比直接使用 Hibernate 更好。 Hibernate 与 Spring Data 捆绑在一起,充当 JPA 提供者。

【讨论】:

“生产中的 MySQL 等数据库,测试中的 H2 等嵌入式数据库,两者之间只有一些配置文件发生变化。” 玩俄语时的奇怪语句发布时轮盘赌,然后在使用来自不同供应商的 RDMS 时...非常确定大多数 DBA/程序员都知道您应该在相同的 RDMS 上测试和发布软件,即使相同的 RDMS 具有较小的版本号差异也可能导致错误或意外的性能问题,其中次要版本之间的优化不同 我同意。我没有说它明智,我只是说这很常见:-) “我同意。我说的并不明智,我只是说这很常见 :-)” 很公平。我个人会避免随波逐流在寒冷的天气里找一条河,然后寻找一座桥来穿越;-) .. 或多或少的意思是,我不承担或增加不必要的风险,因为它是在自找麻烦

以上是关于一般意义上的h2与hibernate和MySql之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 不在内存数据库中使用 H2 创建表

Hibernate/H2 外键抛出 org.h2.jdbc.JdbcSQLException

如何将 CLOB 与 Hibernate 以及 Postgres 和 H2 一起使用

Spring、Hibernate、TestNG 和 h2:org.dbunit.dataset.NoSuchTableException:用户

通过使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会在 H2 DB 中将用户设置为自动增量

将 Hibernate HQL 应用于 H2 时遇到困难