休眠 – 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=org.hibernate.dialect.DB2Dialect
hibernate.dialect属性使 Hibernate 为给定的特定数据库生成适当的 SQL 语句。
休眠配置: MySQL方言
Configuration config = new Configuration()
.addClass(org.javabydeveloper.domain.Student.class)
.setProperty(“hibernate.dialect”, “org.hibernate.dialect.MySQL5Dialect“)
.setProperty(“hibernate.connection.datasource”, “jdbc:mysql://localhost:3380/
.setProperty(“hibernate.order_updates”, “true”);
hibernate.cfg.xml (MySQL8)中的配置:
Hibernate 中的 SQL 方言列表
所有的 Hibernate 方言都可以在org.hibernate.dialect包中找到。以下是 Hibernate 中流行的 SQL 方言列表。 RDBMS DialectsDB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL org.hibernate.dialect.PostgreSQLDialect MySQL5 org.hibernate.dialect.MySQL5Dialect MySQL5 with InnoDB org.hibernate.dialect.MySQL5InnoDBDialect MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect Oracle (any version) org.hibernate.dialect.OracleDialect Oracle 9i org.hibernate.dialect.Oracle9iDialect Sybase org.hibernate.dialect.SybaseASE15Dialect Microsoft SQL Server 2000 org.hibernate.dialect.SQLServerDialect Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect SAP DB org.hibernate.dialect.SAPDBDialect Informix org.hibernate.dialect.InformixDialect HypersonicSQL org.hibernate.dialect.HSQLDialect H2 Database org.hibernate.dialect.H2Dialect Ingres org.hibernate.dialect.IngresDialect Progress org.hibernate.dialect.ProgressDialect Mckoi SQL org.hibernate.dialect.MckoiDialect Interbase org.hibernate.dialect.InterbaseDialect Pointbase org.hibernate.dialect.PointbaseDialect FrontBase org.hibernate.dialect.FrontbaseDialect Firebird org.hibernate.dialect.FirebirdDialect
hibernate.dialect属性应该设置为应用程序数据库的正确 org.hibernate.dialect.Dialect 子类。如果配置中没有指定方言类,对于大多数数据库,Hibernate 会尝试从数据库连接中解析方言名称。但是最好提供 dialect 以便 Hibernate 为特定的数据库版本识别适当的 Dialect 类。