该技术博客属于原创 ,转载请注明出处: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:配置结束,这样就可以在同一个项目中,访问不同的数据库。