hibernate访问两个数据库

该技术博客属于原创 ,转载请注明出处:http://www.pm-road.com/index.php/2015/01/06/330/

在项目开发过程中,往往需要跨数据库访问,而hibernate就可以使同一个项目访问不同的数据库。

比如说:1:需要访问同一个数据库,不同的用户名(用户名之间访问表的权限不同,具体可查看:oracle中不同用户对数据的影响);

2:访问不同的数据库,数据库类型相同;

3:访问不同的数据库类型;

以上这三种类型都可以用hibernate 实现 。

以下就是前两天碰到的一个项目,在这里总结一下PM 经验,接下来,就做一个例子,该例子是使用spring + hibernate 实现的。

1:修改spring-hibernate.xml   文件,添加如下代码:

<!–默认的访问数据库–>

<bean id=”sessionFactory”
        class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>

<!–默认的数据库对应hibernate.cfg.xml文件–>
        <property name=”configLocation” value=”classpath:hibernate.cfg.xml”>
        </property>
    </bean>

<!–另一个数据库–>

<!–默认的数据库对应acgis_hibernate.cfg.xml文件(文件名自己定义)–>

<bean id=”bus_sessionFactory”
        class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
        <property name=”configLocation” value=”classpath:acgis_hibernate.cfg.xml”>
        </property>
   </bean>

 

2:在原来的基础上新建acgis_hibernate.cfg.xml  ,与hibernate.cfg.xml  同级别;内容如下(该文件的内容和hibernate.cfg.xml 内容相似,不同的就是访问数据库的用户名和密码,以及mapping中的实体类配置文件):

<hibernate-configuration>
    <session-factory>
        <!– 正式环境外网 –>
        <property name=”hibernate.connection.url”>jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
        <property name=”hibernate.connection.username”>pout</property>
        <property name=”hibernate.connection.password”>qazaq</property>
       
        <property name=”hibernate.connection.driver_class”>oracle.jdbc.driver.OracleDriver</property>
        <property name=”hibernate.dialect”>org.hibernate.dialect.Oracle9Dialect</property>
       
        <!– 设置是否在Log中显示Hiberate对数据查询的SQL语句,显示出来感觉意义不大,先关掉,需要Debug时再开  –>
        <property name=”hibernate.show_sql”>true</property>
        <property name=”hibernate.current_session_context_class”>thread</property>

        <!– C3P0 connection pool   以下配置可视自己的情况而定 –>
        <property name=”hibernate.connection.provider_class”>org.hibernate.connection.C3P0ConnectionProvider</property>
        <property name=”hibernate.c3p0.max_size”>50</property>
        <property name=”hibernate.c3p0.min_size”>2</property>
        <property name=”hibernate.c3p0.max_size”>50</property>
        <property name=”hibernate.c3p0.initialPoolSize”>2</property>
        <property name=”acquireRetryAttempts”>5</property>
 
        <property name=”hibernate.c3p0.timeout”>120</property>
        <property name=”hibernate.c3p0.max_statements”>100</property>
        <property name=”hibernate.c3p0.idle_test_period”>120</property>
        <property name=”hibernate.c3p0.acquire_increment”>2</property>
        <property name=”hibernate.c3p0.validate”>true</property>

       <!–访问该数据库,对应的实体类,如没有可以不要–>
        <mapping resource=”com/pm_road/tgs/bean/xml/V_station.hbm.xml” />    
        <mapping resource=”com/pm_road/tgs/bean/xml/V_route.xml” />    
        <mapping resource=”com/pm_road/tgs/bean/xml/V_rsrelation.xml” />    
        
    </session-factory>
</hibernate-configuration>

3:在声明Dao的配置文件中,根据不同的DAO 访问不同的数据库这样配置 :

<bean id=”infoDao” class=”com.pm_road.tgs.dao.impl.InfoDaoImpl”>
        <property name=”sessionFactory” ref=”sessionFactory“></property><!–对应上面的id  值”–>
    </bean>
    <bean id=”queryDao” class=”com.pm_road.tgs.dao.impl.QueryDaoImpl”>
        <property name=”sessionFactory” ref=”bus_sessionFactory“></property><!–对应上面的id  值”–>
    </bean>

 

4:配置结束,这样就可以在同一个项目中,访问不同的数据库。

猜你喜欢

转载自rqlipeng.iteye.com/blog/2180344