`
yuanyuan7891
  • 浏览: 167177 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

hibernate连接两个数据库(mysql、sqlservrer)

阅读更多

一、(在src下)写两个Hibernate.cfg.xml文件:
            hbn-mysql.cfg.xml和hbn-sqlserver.cfg.xml
二、分别解析上面的两个.cfg.xml文件建两个sessionFactory,
三、使用session时哪个sessionFactory打开的session就能访问哪个数据库。


详细步骤:-----------------------------------------
一、(在src下)建两个Hibernate.cfg.xml文件

(1.)hbn-mysql.cfg.xml的内容:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<!--hibernate配置文件,定义所使用的MySQL数据库的配置信息 -->
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.url">jdbc:mysql://localhost:3306/dataSource?characterEncoding=utf-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.username">root</property>
<property name="connection.password">password</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping
   resource="com/fourstar/starTransport/daomain/orderIdStatus.hbm.xml" />
<mapping
   resource="com/fourstar/starTransport/daomain/freightCompany.hbm.xml" />
</session-factory>
</hibernate-configuration>

(2.)hbn-sqlserver.cfg.xml的内容:

<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="connection.driver_class">
   com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="connection.url">
   jdbc:sqlserver://192.168.2.16:1433; DatabaseName=DB
</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
<property name="connection.isolation">2</property>
<property name="dialect">
   org.hibernate.dialect.SQLServerDialect
</property>
<mapping
   resource="com/fourstar/starTransport/daomain/transactions.hbm.xml" />
   <mapping
   resource="com/fourstar/starTransport/daomain/transactionDetail.hbm.xml" />
</session-factory>
</hibernate-configuration>


二、建一个类(HbnUtil)用于连接数据库(用于创建sessionFactory和openSession()静态方法)

package com.fourstar.starTransport.dao.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HbnUtil {// 根据hibernate.cfg.xml创建一个静态sessionFactory

private static SessionFactory sf;
private static SessionFactory MSsf;
static {
   sf = new Configuration().configure("/hbn-sqlserver.cfg.xml")
     .buildSessionFactory();
   MSsf = new Configuration().configure("/hbn-mysql.cfg.xml")
   .buildSessionFactory();
}

/**根据DBName判断调用哪个sessionFactory的openSession()方法*/
public static Session getSessionByDB(String DBName) {
   Session s = null;

   if (DBName == "mysql") {
    if (!MSsf.isClosed())
     s = MSsf.openSession();
   } else if (DBName == "sqlserver") {
    if (!sf.isClosed())
     s = sf.openSession();
   } else {
    System.out.println("错误的 DBName!");
   }
   return s;
}
/**根据DBName判断调用哪个sessionFactory的close()方法*/
public static void closeSessionFactoryByDB(String DBName) {
   if (DBName == "mysql") {
    if (!MSsf.isClosed()) {
     MSsf.close();
    }
   } else if (DBName == "sqlserver") {
    if (!sf.isClosed()) {
     sf.close();
    }
   } else {
    System.out.println("错误的 DBName!");
   }
}
}

三、测试:使用getSessionByDB(String DBName)获得不同数据库的session

package com.fourstar.starTransport.dao.util;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

public class Test1{
public static void main(String[] args) {
   String DBName = "mysql";
// String DBName = "sqlservrer";
   Session s = HbnUtil.getSessionByDB(DBName);
   try { 
    String sql = " from freightCompany";
    Query query = s.createQuery(sql); 
   } catch (HibernateException e) {
    e.printStackTrace();
   }finally{
    s.close();
    HbnUtil.closeSessionFactoryByDB(DBName);
   } 
}
}



————————————————————————————————————————

————————————————————————————————————————

做完这些之后我再介绍下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.cfg.xml映射文件使得configuration对象的实例化的方法new Configuration().configure()。如果我们需要连接两个数据库就需要解析两个hibernate映射文件去实例化两个configuration对象,我们使用方法new Configuration().configure(“hibernate文件路径”)。然后使用configuration对象的 buildSessionFactory()方法去创建session工厂。有了session工厂就可以生产数据库操作对象session了。
     
  • 大小: 4.8 KB
分享到:
评论
1 楼 jptiancai 2012-12-21  
博主,要是同时连接两个oracle数据库,那就要同时打开session啊? 那样怎么实现呢?

相关推荐

    hibernate连接金仓数据库所需jar包集合lib.7z

    2. **配置Hibernate**:创建一个`hibernate.cfg.xml`配置文件,指定数据库连接参数,例如URL、用户名、密码,以及JDBC驱动类(如`com.kingbase.jdbc.Driver`)。 3. **实体类映射**:为数据库表创建对应的Java实体...

    hibernate与各种数据库的连接配置

    Hibernate 与各种数据库的连接配置 ...Hibernate 提供了多种数据库连接配置,包括 MySql、Sql Server、Oracle 和 DB2 等。开发人员可以根据需要选择合适的数据库连接配置,并在 hibernate.cfg.xml 文件中进行配置。

    hibernate所需包(数据库为mysql包)

    例如,`@Entity`表示这是一个数据库表对应的实体,`@Table`指定表名,`@Id`标识主键,`@GeneratedValue`定义主键生成策略。 查询方面,Hibernate支持HQL(Hibernate Query Language),一种面向对象的查询语言,...

    hibernate和MySQL的jar

    3. **配置文件(Hibernate.cfg.xml)**: 这个XML文件包含了数据库连接的详细信息,如URL、用户名、密码等,以及Hibernate的配置选项,如缓存设置、方言等。 4. **会话工厂(SessionFactory)**: 会话工厂是...

    Hibernate连接MySql数据库生成表结构

    当应用程序启动并建立数据库连接时,Hibernate会自动检查`hibernate.hbm2ddl.auto`的设置,并根据实体类创建表。如果表已经存在,`create`策略会删除旧表并重新创建,因此在生产环境中通常使用`update`或`validate`...

    用myeclipse作的第一个hibernate连接mysql数据库的例子

    用myeclipse作的第一个hibernate连接mysql数据库的例子. 先在mysql数据库中创建好课程表,建表的命令如下: create table kcb(kch char(10) primary key,kcm char(20),kxxq int,xs int,xf int). 代码主要在src文件夹...

    mysql数据库hibernate jar文件

    mysql数据库hibernate jar文件

    hibernate连接各种数据库的配置

    以下是配置Hibernate与MySQL数据库连接的关键元素: - **日志设置**:`&lt;property name="show_sql"&gt;true&lt;/property&gt;`,此设置用于启用SQL语句的日志输出,有助于调试和性能分析。 - **方言设置**:`...

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

    `Proxool`维护了一个数据库连接的池,当应用程序需要数据库连接时,可以从池中获取;使用完毕后,连接会返回到池中,供其他线程复用。这样避免了频繁创建和销毁连接带来的开销。当连接因各种原因断开时,`Proxool`能...

    Hibernate中连接MySql所需的jar包

    标题和描述提到了"Hibernate中连接MySql所需的jar包",这暗示了我们主要关注的是与Hibernate和MySQL数据库连接相关的库。 首先,`hibernate3.6.7.jar`是Hibernate的核心库,包含了Hibernate框架的主要功能。这个...

    hibernate连接mysql,oracle,sqlserver, access数据库包和方法

    本文将详细介绍如何使用Hibernate连接MySQL、Oracle、SQL Server以及Access数据库,包括所需的包和具体的方法。 首先,让我们来看看连接MySQL数据库所需的配置和步骤: 1. **添加依赖**:在你的项目中,你需要包含...

    hibernate连接Oracle和mySql数据库驱动下载

    hibernate连接Oracle和mySql数据库驱动下载,mysql-connector-java-5.1.7-bin.jar,ojdbc6.jar,ojdbc7.jar,xdb6.jar,ucp.jar,simplefan.jar,orai18n.jar,ons.jar,antlr-2.7.7.jar,c3p0-0.9.2.1.jar等等全部...

    hibernate根据字段生成数据库表

    这种情况下,手动为每个数据库创建相同的表结构既耗时又容易出错。Hibernate 提供了一个非常实用的功能——基于实体类自动生成数据库表,这不仅能够显著提高开发效率,还能减少人为错误。本文将详细介绍如何利用 ...

    使用Hibernate连接MySql的入门小程序

    3. **配置Hibernate**:在`hibernate.cfg.xml`中配置数据库连接信息。 4. **创建实体类**:在`User.java`中定义实体类,使用注解关联数据库表。 5. **编写主程序**:在`Main.java`中,使用Hibernate API进行数据库...

    Hibernate访问多个数据库

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

    hibernate映射的创建数据库连接时的配置

    hibernate映射的创建数据库连接时的配置。教你怎么写那个配置。

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

    首先,Hibernate提供了一些基本的数据库连接驱动程序,例如mysql、oracle、sqlserver等。这些驱动程序可以让Hibernate连接不同的数据库。但是,为了确保数据的正确性和一致性,Hibernate还需要使用不同的SQL方言来...

    Sturts2整合Hibernate连接MySQL数据库

    3. **数据库连接**:使用Hibernate的SessionFactory,我们可以创建Session对象,通过Session来执行SQL操作。例如,调用`session.save()`方法来保存新对象到数据库,`session.get()`或`session.load()`来获取已有记录...

    Hibernate连接MySql的一个小实例

    Hibernate连接MySql小实例 环境:eclipse3.5 数据库:mysql 需要建立tc数据局,tc下有张user表,user表有id,name,pass项。 请在连接数据库配置文件hibernate.ctf.xml中配置用户名和密码 很容易理解的

    SpringBoot+hibernate+mysql+sqlserver双数据源

    7. 数据迁移与同步:在某些场景下,可能需要实现在两个数据库间的数据迁移或实时同步,这可能需要用到额外的工具或中间件,如Flyway、Liquibase等。 总的来说,"SpringBoot+Hibernate+MySQL+SQLServer双数据源"项目...

Global site tag (gtag.js) - Google Analytics