📜  休眠 – SQL 方言

📅  最后修改于: 2022-05-13 01:55:38.667000             🧑  作者: Mango

休眠 – SQL 方言

Hibernate是一个开源的、非侵入性的、轻量级的Java ORM(对象关系映射)框架,用于开发独立于数据库软件的持久性逻辑。 ORM(对象关系映射)框架简化了数据创建、数据操作和数据访问。它是一种将对象映射到存储在数据库中的数据的编程技术。它在内部使用 JDBC API 与数据库进行交互。

SQL 方言

Dialect是一个充当Java JDBC 类型SQL 类型之间桥梁的类,它包含了Java语言数据类型和数据库数据类型之间的映射。方言允许 Hibernate 生成针对特定关系数据库优化的 SQL。 Hibernate 基于Dialect类为特定数据库生成查询。 hibernate 方言向框架提供了如何将hibernate 查询 (HQL)转换为本地SQL 查询的信息。

由于Hibernate与数据库无关。它可以与不同的数据库一起工作。但是,数据库具有专有扩展/原生 SQL 变体,以及 SQL 标准实现的集合/子集。由于这个hibernate必须使用特定于数据库的SQL。方言指定 hibernate 中使用的数据库类型,以便 hibernate 可以切换到特定于数据库的 SQL 生成器代码。方言可以通过以下方式使用:

  • 生成优化的 SQL 查询
  • 如果应用程序在多个数据库的帮助下工作,则与特定数据库进行交互。
  • 基于数据库软件设置休眠配置文件属性的默认值,即使它们没有在配置文件中指定。

SQL 方言配置

SQL方言将我们用Java或任何其他面向对象程序编写的HQL查询转换为特定的数据库SQL查询。任何hibernate应用程序与数据库的连接,都需要提供SQL方言的配置。我们可以在hibernate.cfg.xml (DB2 方言)中提供它:

我们也可以在 属性文件为:

hibernate.dialect属性使 Hibernate 为给定的特定数据库生成适当的 SQL 语句。

休眠配置: MySQL方言

hibernate.cfg.xml (MySQL8)中的配置:

Hibernate 中的 SQL 方言列表

所有的 Hibernate 方言都可以在org.hibernate.dialect包中找到。以下是 Hibernate 中流行的 SQL 方言列表。

RDBMS

Dialects

DB2org.hibernate.dialect.DB2Dialect
DB2 AS/400org.hibernate.dialect.DB2400Dialect
DB2 OS390org.hibernate.dialect.DB2390Dialect
PostgreSQLorg.hibernate.dialect.PostgreSQLDialect
MySQL5org.hibernate.dialect.MySQL5Dialect
MySQL5 with InnoDBorg.hibernate.dialect.MySQL5InnoDBDialect
MySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version)org.hibernate.dialect.OracleDialect
Oracle 9iorg.hibernate.dialect.Oracle9iDialect
Sybaseorg.hibernate.dialect.SybaseASE15Dialect
Microsoft SQL Server 2000org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
SAP DBorg.hibernate.dialect.SAPDBDialect
Informixorg.hibernate.dialect.InformixDialect
HypersonicSQLorg.hibernate.dialect.HSQLDialect
H2 Databaseorg.hibernate.dialect.H2Dialect
Ingresorg.hibernate.dialect.IngresDialect
Progressorg.hibernate.dialect.ProgressDialect
Mckoi SQLorg.hibernate.dialect.MckoiDialect
Interbaseorg.hibernate.dialect.InterbaseDialect
Pointbaseorg.hibernate.dialect.PointbaseDialect
FrontBaseorg.hibernate.dialect.FrontbaseDialect
Firebirdorg.hibernate.dialect.FirebirdDialect

hibernate.dialect属性应该设置为应用程序数据库的正确 org.hibernate.dialect.Dialect 子类。如果配置中没有指定方言类,对于大多数数据库,Hibernate 会尝试从数据库连接中解析方言名称。但是最好提供 dialect 以便 Hibernate 为特定的数据库版本识别适当的 Dialect 类。