`
JackenCai
  • 浏览: 4780 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate数据库方言小谈

阅读更多

   如果一个系统可能运行于多种数据库,或者同时使用多种数据库,那么,使用Hibernate将会给你带来很多的方便,想信很多接触Hibernate的人都会体会到。Hibernate底层是通过dialect包来对各种数据库的差异进行抽象的。Dialect类中实现每种数据库相同的东西,而不同数据库对应会有该类的一个扩展实现,最终通过DialectFactory来决定创建哪一个类。通常我们都会指定hibernate.dialect属性,那直接创建该属性对应的类。如果我们没有指定该属性,那么由Hibernate自己决定选择合适的方言。在DialectFactory中初始化各种数据库对应的方言的Map,以数据库产品名为key,以方言的包装对象为value。Hibernate自动选择方言时,会通过JDBC的DatabaseMetadata取得数据库的产品名称,根据名称取得对应的方言。DialectFactory中对该Map的初始化的部分代码如下:

// TODO : this is the stuff it'd be nice to move to a properties file or some other easily user-editable place
	private static final Map MAPPERS = new HashMap();
	static {
		// detectors...
		MAPPERS.put( "HSQL Database Engine", new VersionInsensitiveMapper( "org.hibernate.dialect.HSQLDialect" ) );
		MAPPERS.put( "H2", new VersionInsensitiveMapper( "org.hibernate.dialect.H2Dialect" ) );
		MAPPERS.put( "MySQL", new VersionInsensitiveMapper( "org.hibernate.dialect.MySQLDialect" ) );
		MAPPERS.put( "PostgreSQL", new VersionInsensitiveMapper( "org.hibernate.dialect.PostgreSQLDialect" ) );
		MAPPERS.put( "Apache Derby", new VersionInsensitiveMapper( "org.hibernate.dialect.DerbyDialect" ) );
...


   原本上,这种自动选择的方式,会给我们带来方便,只可惜,从以上的代码的注释中可以知道,目前这一部分的初始化是通过硬编码的,只有在以后的版本才会移动到配置文件或其他容易用户编译的地方,否则,我们可以非常容易的添加我们的配置供Hibernate进行自动选择。而经常我们所使用的数据库驱动程序所取到的数据库产品名称会跟以上硬编码的不同,所以最终我们还是得自己配置数据库方言。

  由于我们的系统中用到了好几个数据源,经常也是对应不同类型的数据库,并且数据源都是由容器提供的,在首次部署时经常因为数据库类型变了而忘了修改对应的数据库方言,而出了问题,这给实施人员带来了很多的不便。不过目前除了对各种数据库提供与以上硬编码相同的数据库产品名称的驱动程序外,我们就只能自己动手了。

分享到:
评论

相关推荐

    hibernate中所有数据库方言

    在探讨Hibernate中所有数据库方言之前,我们先简要回顾一下Hibernate框架本身。Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用与各种关系型数据库进行交互。它提供了强大的功能,如对象持久化、查询...

    达梦数据库hibernate方言包

    达梦数据库各版本的hibernate方言包,包含版本 DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...

    达梦数据库java驱动包、hibernate方言包

    * 达梦8 hibernate方言包对应版本说明 /*************************************** jar包在dialect目录下: 1. DmDialect-for-hibernate2.0.jar 对应 Jdk1.4及以上, hibernate2.0 环境 2. DmDialect-for-hibernate2.1...

    达梦 Hibernate 方言 2.0 至 4.0

    从2.0到4.0的版本升级,不仅代表了Hibernate框架自身的进步,也反映了达梦数据库方言在适应性、性能和功能上的不断优化。 在Hibernate 2.0至4.0的过程中,方言的改进主要体现在以下几个方面: 1. **SQL兼容性**:...

    Hibernate不同数据库的连接及SQL方言

    Hibernate不同数据库的连接及SQL方言 在Hibernate中,连接不同的数据库需要使用不同的数据库连接驱动程序和SQL方言。下面我们将详细介绍如何在Hibernate中连接不同的数据库。 首先,Hibernate提供了一些基本的...

    达梦Hibernate方言2.0至4.0

    这里我们关注的是“达梦Hibernate方言2.0至4.0”,这是一个专为达梦数据库系统(DM)设计的Hibernate方言支持,涵盖了Hibernate框架的多个版本。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员...

    达梦数据库方言 (dialect) jar包(史上最全)

    达梦数据库方言 (dialect) jar包 包含hibernate各版本,DmHibernateSpatial-1.0.jar, DmHibernateSpatial-1.1.jar,DmDialect-for-hibernate5.3.jar ... DmDictionary.jar,dmjooq-dialect-3.12.3.jar,gt-dameng-...

    达梦数据库7.6最新的驱动包及hibernate方言包

    这个压缩包包含了达梦数据库7.6版本与不同Java Development Kit (JDK) 版本兼容的驱动包,以及适用于Hibernate 5.3及以下版本的方言包。 驱动包对于Java开发者来说至关重要,它们是Java应用程序连接到达梦数据库的...

    瀚高数据库hibernate方言 hgdb-hibernate-dialect

    同时,通过集成瀚高数据库方言,开发者可以利用Hibernate的高级特性,如懒加载(Lazy Loading)、缓存(Caching)、查询语言(HQL)等,提高开发效率和应用性能。 瀚高数据库Hibernate方言包通常包含以下内容: 1. 类定义...

    达梦数据库7最新版驱动Dm7JdbcDriver18及hibernate5.0方言包

    接下来是`DmDialect-for-hibernate5.0-1.8.0_65-b17.jar`,这是为Hibernate ORM框架定制的达梦数据库方言。Hibernate是一个流行的Java持久层框架,它允许开发人员使用面向对象的方式来操作数据库,自动将Java对象...

    hibernate方言包

    hibernate方言包

    Hibernate 配置各种数据库

    Hibernate 配置各种数据库 Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够...在 Hibernate 中配置不同的数据库需要选择合适的驱动程序、连接 URL 和方言,以便正确地连接到相应的数据库。

    达梦数据库驱动包、方言、jdbc

    本压缩包文件包含了达梦数据库的驱动程序、方言以及JDBC(Java Database Connectivity)相关资源,是进行Java编程与达梦数据库交互的重要工具。 首先,我们来详细了解一下“达梦驱动”。达梦数据库驱动,通常指的是...

    hibernate动态数据库进化版

    2. **多数据库支持**:为了适应不同的数据库,如MySQL、Oracle、SQL Server等,需要使用Hibernate的`Dialect`机制,动态选择合适的数据库方言。通过自定义`Dialect`类,可以实现特定数据库的特性,如存储过程、函数...

    hibernate方言

    Hibernate方言是Hibernate ORM框架中的一个重要组成部分,它负责与各种数据库管理系统进行通信时的SQL语句转换。在Hibernate中,方言(Dialect)是用于定义特定数据库的SQL语法、特性以及限制的一个类。当Hibernate...

    Hibernate连接SQLite配置说明和方言代码

    2.2、打开此文件,将“<property name="hibernate.connection.url">jdbc:sqlite:D:/EGSDatabase.egsdata”一行中的数据库文件("D:/EGSDatabase.egsdata")修改为合适的数据库文件。 注:附件包含了...

    达梦数据库驱动和方言依赖.zip

    连接达梦数据所必须的驱动和方言 达梦7JDBC驱动分为Dm7JdbcDriver15、Dm7JdbcDriver16、Dm7...达梦7提供不同hibernate和jdk版本的方言包,用户可根据开发环境选择对应的方言包版本,相关方言包驱动在dialect目录下;

    Hibernate数据库操作实例.zip

    标题"Hibernate数据库操作实例.zip"表明这是一个关于使用Hibernate框架进行数据库操作的实际案例。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库交互,而无需...

    精通hibernate数据库编程

    【精通Hibernate数据库编程】是针对初学者设计的学习资源,旨在帮助快速掌握Hibernate这一强大的Java对象关系映射(ORM)框架。Hibernate是Java开发中的一个重要工具,它简化了数据库操作,使得开发者可以更专注于...

Global site tag (gtag.js) - Google Analytics