`

Hibernate访问多数据库

阅读更多
一、              Hibernate 访问数据库时加载的过程

对于大多数使用 Hibernate 的朋友来说,通常使用一下方式来获得 Configuration 实例: Configuration configure = new Configuration().configure();

在 Hibernate 中, Configuration 是 hibernate 的入口。在实例化一个 Configuration 的时候, Hibernate 会自动在环境变量( classpath )里面查找 Hibernate 配置文件 hibernate.properties 。如果该文件存在,则将该文件的内容加载到一个 Properties 的实例 GLOBAL_PROPERTIES 里面,如果不存在,将打印信息   hibernate.properties not found ;

接下来 Hibernate 将所有系统环境变量( System.getProperties() )也添加到 GLOBAL_PROPERTIES 里面。如果配置文件 hibernate.properties 存在,系统还会进一步验证这个文件配置的有效性,对于一些已经不支持的配置参数,系统将打印出警告信息。

默认状态下 configure() 方法会自动在环境变量( classpath )下面寻找 Hibernate 配置文件 hibernate.cfg.xml ,如果该文件不存在,系统会打印如下信息并抛出 HibernateException 异常 : hibernate.cfg.xml not found ; 如果该文件存在, configure() 方法会首先访问< session-factory >,并获取该元素 name 的属性,如果 name 的属性非空,将用这个配置的值来覆盖 hibernate.properties 的 hibernate.session_factory_name 的配置的值,从这里我们可以看出, hibernate.cfg.xml 里面的配置信息可以覆盖 hibernate.properties 的配置信息。

接下来 configure() 方法访问< session-factory >的子元素,首先将使用所有的< property >元素配置的信息来覆盖 hibernate.properties 里面对应的配置信息。

然后 configure() 会依次访问以下几个元素的内容

< mapping >
< jcs-class-cache >
< jcs-collection-cache >
< collection-cache >

其中< mapping >是必不可少的,必须通过配置< mapping >, configure() 才能访问到我们定义的 java 对象和关系数据库表的映射文件( hbm.xml ),例如:

< mapping resource="Cat.hbm.xml"/ >

这样 configure() 方法利用各种资源就创建了一个 Configuration 实例。对于整个项目来说,如果用一个本地线程来存放这个 Configuration 实例,那么整个项目只需要实例化一次 Configuration 对象(注: Configuration 实例很花费时间),也就提高了项目的效率。



二、              Hibernate 访问多个数据库的配置

根据以上所述, configure() 方法默认是通过访问 hibernate.cfg.xml 的< mapping >元素来加载我们提供的 .hbm.xml 文件。我们也可以直接指定 hbm.xml 文件,例如 addClass() 方法可以直接通过指定 class 来加载对应的映射文件, hibernate 会将提供的 class 的全名(包括 package )自动转化为文件路径,还可以用 addFile 方法直接指定映射文件。例如: Configuration configurate = new Configuration().addClass(“Book.class”);
Configuration configurate = new Configuration().addURL(Configuration.class.getResource ("/Book.hbm.xml"));

Configuration config = new Configuration().addFile("/Cat.hbm.xml");

这样,如果用 xml 配置来配置多个数据库的话,那就写多个配置文件。这里假设对应两个数据库(一个是 MySQL ,一个是 SQLServer ),我们可以把其 xml 文件定义为“ mysql.cfg.xml ”和“ sqlserver.cfg.xml ”。则用 Configuration 类获取 SessionFactory 的代码如下:
SessionFactory mysqlFactory = new Configuration().configure("/mysql.cfg.xml").buildSessionFactory();
SessionFactory sqlserverFactory = new Configuration().configure("sqlserver.cfg.xml ").buildSessionFactory();


分享到:
评论

相关推荐

    Hibernate 配置各种数据库

    Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够与多种数据库进行集成。在 Hibernate 的配置文件中,我们可以配置不同的数据库连接,包括驱动程序、URL 等信息。 配置 Hibernate 连接...

    Hibernate访问Access数据库的配置

    这个附件中存放了从配置hibernate 访问Access数据库所需要的JDBC驱动和言语库以及一个配置模板。只需要作一点修改就可以使用了。 注意要使用该库需要使用jdk1.6及hibernate3.5以上版本。

    hibernate中所有数据库方言

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

    Hibernate访问多个数据库

    总结来说,Hibernate访问多个数据库的关键在于为每个数据库创建单独的配置和`SessionFactory`。在XML配置文件中,每个数据库的连接信息、方言和映射文件都需要明确指定。而在Spring环境中,我们可以利用IoC容器和...

    根据hibernate反向生成数据库的java代码

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。"根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括...

    hibernate数据库访问接口设计

    总结,Hibernate 数据库访问接口设计涵盖了从基础的数据库连接、对象持久化到高级的查询语言、缓存机制等多个方面。熟练掌握这些接口和概念,能极大地提升Java开发者的数据库操作能力。在实际项目中,应根据需求选择...

    Hibernate实例 oracel数据库

    4. 编写DAO(数据访问对象)层,使用Session进行数据库操作。 5. 使用JUnit创建测试类,初始化SessionFactory,创建Session,进行增删改查操作,并断言结果。 6. 如果有自定义测试类,根据需求编写相应的测试方法。 ...

    基于hibernate的简单数据库实现

    Hibernate提供了一种便捷的事务管理方式,可以将多个数据库操作封装在一个Transaction中,保证原子性和一致性。 通过以上内容,我们了解了Hibernate的基本操作和核心概念。在实际项目中,可以根据需求选择合适的...

    国产神通数据库用到的jdbc驱动包、集成Hibernate用到的jar包

    JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 在本压缩包中,我们找到了用于集成Hibernate的jar包,Hibernate是一...

    hibernate框架下对oracle数据库操作所需jar包.zip

    综上所述,使用Hibernate框架操作Oracle数据库涉及到了多个方面的知识,包括Hibernate的核心概念、Oracle JDBC驱动的使用、数据库配置、实体映射、持久化操作、查询方式以及事务管理等。理解并掌握这些知识点,能够...

    hibernate动态数据库进化版

    通过配置文件或注解,Hibernate可以将Java对象与数据库表进行映射,实现了数据的透明访问。 在动态数据库进化版中,我们可能涉及到以下几个关键知识点: 1. **动态SQL**:传统的Hibernate使用预定义的HQL...

    hibernate连接各种数据库的方法

    ### 使用Hibernate连接各种...此外,需要注意的是,在实际部署过程中还需要考虑诸如连接池设置等因素,以提高数据库访问效率并避免资源浪费。希望本文能够帮助大家更好地理解和掌握Hibernate与数据库之间的交互方式。

    使用Hibernate访问sqlserver数据库

    **使用Hibernate访问SQL Server数据库** Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库和面向对象编程之间架起桥梁的方式。通过使用Hibernate,我们可以避免编写大量的SQL...

    Hibernate操作数据库

    这可以显著减少对数据库的访问次数,尤其在高并发场景下。 8. **懒加载和立即加载**: Hibernate 提供了懒加载和立即加载机制来控制关联对象的加载时机。懒加载只在真正需要时才加载关联对象,而立即加载则会在...

    hibernate自动重新连接数据库proxool的使用

    在Java的持久层框架Hibernate中,数据库连接管理是至关重要的。`Proxool`是一个开源的连接池实现,它能够帮助我们有效地管理数据库连接,提高系统性能并减少资源消耗。当我们遇到数据库连接断开的情况时,`Hibernate...

    hibernate中访问access数据库需要的jar包hibernate2access

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。当使用Hibernate与Microsoft Access数据库交互时,由于Access数据库的特性和...

    HibernateSpring多数据库解决方案.doc

    在互联网行业中,数据库管理是关键的一环,尤其是在大型系统中,常常需要处理多个数据库以实现负载均衡、数据冗余或不同的访问策略。本方案主要探讨如何在基于Hibernate和Spring框架的环境中实现多数据库的管理,...

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

    通过以上介绍,我们可以看到这个压缩包提供了完整的工具,使Java开发者能够顺利地在项目中集成达梦数据库7.6,并利用Hibernate进行高效的数据访问。无论是新项目还是已有项目的数据库迁移,这些驱动和方言包都是必不...

Global site tag (gtag.js) - Google Analytics