Hibernate&Spring对多数据源、多Schema的支持

Hibernate&Spring对多数据源、多Schema的支持
@author:WMsteve
@Email:weisteve@yeah.net
@Time:2011年12月30日17:02:55
@Modify Time:2012年1月1日13:17:35 v1.1
 
Hibernate是一个开源的对象映射框架。它实现了对JDBC的轻量级封装,使得java开发人员能够使用对象的概念来操作数据源。下面介绍Hibernate中重要的四个概念:
Session接口
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
SessionFactory接口
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Configuration接口
Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
Transaction接口
Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
Query和Criteria接口
Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
Spring框架
Spring是一个开源的控制反转的j2ee框架,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
现在我们需要借助这两个框架来实现对多数据源和多数据表空间进行操作。
 
首先看Spring的配置文件:applicationContext.xml
<!-- 配置stu库的会话工厂 @author:Wmsteve weisteve@yeah.net 201112299:02:50 -->
<bean id="sessionFactoryStu"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate_stu.xml">
</property>
</bean>
<!-- 配置common库的会话工厂 @author:Wmsteve weisteve@yeah.net 201112299:02:50 -->
<bean id="sessionFactoryCommon"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate_common.xml">
</property>
</bean>
 
上述配置文件中,通过配置common和stu两个独立的sessionFactory,来达到初始化两个不同的hibernate会话工厂,其中hibernate中两个对应的不同的具体配置是通过
<property name="configLocation"
value="classpath:hibernate_stu.xml">
<property name="configLocation"
value="classpath:hibernate_common.xml">
 
将hibernate的具体配置转移到了hibernate_stu.xml和hibernate_common.xml两个文件中;
在这种模式下,控制权已经转交给了Spring托管,Hibernate框架帮助我们生成的HibernateSessionFactory已经不再需要。
 
下面详细看下这两个文件内容(Spring托管的多数据源的文件):
<session-factory>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="show_SQL">true</property>
<property name="connection.url">
jdbc:oracle:thin:@10.4.10.92:1521:DJoracle
</property>
<property name="connection.username">DJUSER</property>
<property name="connection.password">DongJiang2011</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="myeclipse.connection.profile">
Oracle 11 g_common
</property>
<mapping resource="com/dj/hibernate/DJDB_HI/StAddvcdD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StAstrotdF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StDayevR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEnnmcdD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEuntlangD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFfrarB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFieldD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StForecastcF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StForecastF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFraparB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFsdrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGateR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StHailR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StIcefrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StImginfoR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StInstcdB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StInstcdE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StIovRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StMfloodRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPddmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPdmmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPdmmysqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPmevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPptnR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPumpqRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPumpR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StQliceinfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StQticeinfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StReglatF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRiverR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvravR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrfcchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrfsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrstrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdaymyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmevsqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmmysqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvfcchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvsectB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvyevsqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSaltRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedfrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedrfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSnowR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSoilchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSoilR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStbprpB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStcdE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStormR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStsmtaskB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTableD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTableE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTdfrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWdpstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWdwvR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWgrwR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWgrwstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWspavsdR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StZqrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StZvarlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAaacpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAbtpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAcrpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAdlrrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAdnmB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAobiA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAowqmsrA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqBcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqGwsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqHydroeD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLreasA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMispD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMooopD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMsarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqNmispD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqOpcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPasA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPhncpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPlevD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPrecordD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPrsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSmsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSwsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWbhpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWbspD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWqsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrcrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrcrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrlrrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrClctpotB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDfagB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicbcaM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicbcwM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicycaM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicycwM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDstwsplM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDstwuM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDswqW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrFtwrfC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrMsdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrMswqW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrPcnctrtM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRiverW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRldwC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRlmwC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRlywC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRsvrW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSmsinspD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSmsstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrchstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrcinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrcqstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSwsplinfS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWfrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWfrmngM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWmorgpM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrcrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrflvM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWsfsplS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWubcM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrYsdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrYswqW.hbm.xml" />
</session-factory>
 
另外一个数据源配置文件如下:
<session-factory>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="show_SQL">true</property>
<property name="connection.url">
jdbc:oracle:thin:@10.4.10.92:1521:DJoracle
</property>
<property name="connection.username">DJUSER</property>
<property name="connection.password">DongJiang2011</property>
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="myeclipse.connection.profile">
Oracle 11 g_common
</property>
<mapping resource="com/dj/hibernate/DJDB_HI/StAddvcdD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StAstrotdF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StDayevR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEnnmcdD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StEuntlangD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFfrarB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFieldD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StForecastcF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StForecastF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFraparB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StFsdrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGateR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StGrwR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StHailR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StIcefrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StImginfoR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StInstcdB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StInstcdE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StIovRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StMfloodRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPddmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPdmmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPdmmysqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPmevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPptnR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPumpqRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StPumpR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StQliceinfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StQticeinfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StReglatF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRiverR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvravR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrfcchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrfsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRsvrstrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdaymyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmevsqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmmyavS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvdmmysqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvfcchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvsectB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StRvyevsqS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSaltRGd.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedfrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSedrfR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSnowR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSoilchB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StSoilR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStbprpB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStcdE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStormR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StStsmtaskB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTableD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTableE.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTdfrF.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTideR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StTmpR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasavR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasevsR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWasrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWdpstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWdwvR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWgrwR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWgrwstatR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StWspavsdR.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StZqrlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_HI/StZvarlB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAaacpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAbtpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAcrpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAdlrrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAdnmB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAobiA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqAowqmsrA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqBcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqGwsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqHydroeD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLreasA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqLrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMispD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMooopD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqMsarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqNmispD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqOpcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPasA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPcpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPhncpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPlevD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPrecordD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqPrsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSmsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqSwsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWbhpD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWbspD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWfrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWqsinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrcrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrcrsrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrarA.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WQ/WqWrrlrrB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrClctpotB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDfagB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicbcaM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicbcwM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicycaM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDflicycwM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDstwsplM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDstwuM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrDswqW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrFtwrfC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrMsdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrMswqW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrPcnctrtM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRiverW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRldwC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRlmwC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRlywC.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrRsvrW.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSmsinspD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSmsstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrchstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrcinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSrcqstB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrSwsplinfS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWfrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWfrmngM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWmorgpM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrcrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrflvM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWrrinfB.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWsfsplS.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrWubcM.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrYsdwasD.hbm.xml" />
<mapping resource="com/dj/hibernate/DJDB_WR/WrYswqW.hbm.xml" />
</session-factory>
 
看到上面两个hibernate配置文件,您可以发现,这两个配置中可以完全独立的配置信息,通过spring来完成了Session的管理。
下面看Spring的applicationContext.xml中bean的配置:
<!-- 配置stu库的DAO控制反转 @author:Wmsteve weisteve@yeah.net 201112299:02:50 -->
<bean id="StDayevRDAO" class="com.dj.hibernate.stu.StDayevRDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryStu" />
</property>
</bean>
<bean id="StGateFDAO" class="com.dj.hibernate.stu.StGateFDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryStu" />
</property>
</bean>
<bean id="StTmpRHisDAO" class="com.dj.hibernate.stu.StTmpRHisDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryStu" />
    </property>
</bean> 
<bean id="WrSrcinfBDAO"
    class="com.dj.hibernate.DJDB_WR.WrSrcinfBDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryCommon" />
    </property>
</bean>
<bean id="WrWrcrinfBDAO"
    class="com.dj.hibernate.DJDB_WR.WrWrcrinfBDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryCommon" />
    </property>
</bean>
<bean id="WrRiverWDAO"
    class="com.dj.hibernate.DJDB_WR.WrRiverWDAO">
    <property name="sessionFactory">
        <ref bean="sessionFactoryCommon" />
    </property>
</bean>
 
这样就可以实现了hiberante借助spring实现对对数据源和多数据表空间的托管;
 
上述多数据源是通过Spring进行托管不同数据源的访问;
同时如果项目中不引入Spring,还可以通过分别调用HibernateSessionFactory中的:
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/

public static void setConfigFile(String configFile) {
    HibernateSessionFactory.configFile = configFile;
    sessionFactory = null;
}
切换不同的配置xml文件,完成不同数据源的切换;
完整的HibernateSessionFactory内容如下:
package com.dj.hibernate; 

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution. Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html }.
 */

public class HibernateSessionFactory {

    /** 
     * Location of hibernate.cfg.xml file.
     * Location should be on the classpath as Hibernate uses  
     * #resourceAsStream style lookup for its configuration file. 
     * The default classpath location of the hibernate config file is 
     * in the default package. Use #setConfigFile() to update 
     * the location of the configuration file for the current session.   
     */

    private static String CONFIG_FILE_LOCATION = "/hibernate_common.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private static Configuration configuration = new AnnotationConfiguration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

    static {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            System.err
                    .println("%%%% Error Creating SessionFactory %%%%");
            e.printStackTrace();
        }
    }
    private HibernateSessionFactory() {
    }

    /**
     * Returns the ThreadLocal Session instance. Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     * @return Session
     * @throws HibernateException
     */

    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

        if (session == null || !session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ? sessionFactory.openSession()
                    : null;
            threadLocal.set(session);
        }

        return session;
    }

    /**
     * Rebuild hibernate session factory
     *
     */

    public static void rebuildSessionFactory() {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            System.err
                    .println("%%%% Error Creating SessionFactory %%%%");
            e.printStackTrace();
        }
    }

    /**
     * Close the single hibernate session instance.
     *
     * @throws HibernateException
     */

    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

    /**
     * return session factory
     *
     */

    public static org.hibernate.SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    /**
     * return session factory
     *
     *    session factory will be rebuilded in the next call
     */

    public static void setConfigFile(String configFile) {
        HibernateSessionFactory.configFile = configFile;
        sessionFactory = null;
    }

    /**
     * return hibernate configuration
     *
     */

    public static Configuration getConfiguration() {
        return configuration;
    }

}
 
Spring托管后的多数据源的操作样例程序如下:
package com.dj.service.cis; 

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dj.hibernate.dao.CommonDao;
import com.dj.hibernate.stu.StRiverR;
import com.dj.hibernate.stu.StStbprpB;
import com.dj.view.dto.cis.QueryParams;
import com.sun.org.apache.xerces.internal.impl.dv.xs.DateTimeDV;


public class CisInformation {
    /**
     * 获取获取水文站基本属性
     * @return 所有水文测站List<T>类型
     * @throws Exception 
     */

    public List<? extends Object> getWaterStationProperties() throws Exception
    {
        List params=new ArrayList();
        params.add("ZQ");
        params.add("ZZ");
        params.add("RR");
        return getStationProperties(params);
    }

    /**
     * 获取所有余量站的信息
     * @return 返回范式的类型List<? extends Object>
     * @author WMsteve Email:weisteve@yeah.net
     * @throws Exception 
     */

    public List<? extends Object> getRainStationProperties() throws Exception
    {
        List params=new ArrayList();
        params.add("PP");
        return getStationProperties(params);
    }

    public List<StStbprpB> getStationList(){
        try{
            ApplicationContext actx=new ClassPathXmlApplicationContext("applicationContext.xml");
            CommonDao cd=(CommonDao) actx.getBean("CommonDaoStu");
            String QueryString=getQueryString("StStbprpB", null, null, null);
            List list=cd.query(QueryString);
            return list;
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 
     * @param params List泛型形式的查询条件
     * @return 返回查询结果List<? extends Object>类型
     * @author WMsteve Email:weisteve@yeah.net
     * @throws Exception 
     */

    public static List<StStbprpB> getStationProperties(List<? extends Object> params) throws Exception
    {
        ApplicationContext actx=new ClassPathXmlApplicationContext("applicationContext.xml");
        CommonDao cd=(CommonDao) actx.getBean("CommonDaoStu");
        String QueryString=getQueryString("StStbprpB", "STTP", params, "OR");
        System.out.println(QueryString);
        List list=cd.query(QueryString,params);
        return list;
    }



    /**
     * 根据查询列,和查询链接符,参数形式,生成HQL
     * 此查询仅支持单表的单列的多条件查询(链接符号单一的情况)
     * etc.比如查询 站表ST_STBPRP_B中列STTP= 'ZQ|ZZ|RR'的所有情况
     * From ST_STBPRP_B where STTP="ZQ" OR STTP="ZZ" OR STTP="RR"
     * @param TableName 表名
     * @param column 列名
     * @param params 检索条件连接符
     * @param joint 检索条件
     * @return 返回组织后的字符串
     * @author WMsteve weisteve@yeah.net 2011年12月11日10:43:22
     * @throws Exception "TableName 不能为空"
     */

    private static String getQueryString(String TableName,String column,List<? extends Object> params,String joint) throws Exception
    {
        int size=0;
        if(params!=null){
            size=params.size();
        }
        //joint连接符,如果为空,则默认为or
        if(joint==null)
        {
            joint="or";
        }
        StringBuffer sb=new StringBuffer();
        if(TableName!=null){
            sb.append("From "+TableName);
            if(size>0)
            {
                sb.append(" where "+column+ "=?");
            }
            for(int i=1;i<size;i++)
            {
                sb.append(" "+joint+" "+column+ "=?");
            }
        }else throw new Exception("TableName cannot be null!");
        return sb.toString();
    }

    public List<StRiverR> getListByHQL()
    {
        //StRiverR st=new St;
        ApplicationContext actx=new ClassPathXmlApplicationContext("applicationContext.xml");
        CommonDao cd=(CommonDao) actx.getBean("CommonDaoStu");
        List reList= cd.query("From StRiverR striverr where striverr.id.stcd = '81100350'");

        return reList;
    }

    /**
     * 获取河道水文站一段时间数据
     * stcd列表为要查询水文站点的station code集合 该属性设为null查询所有水文站点
     * startdate 为要查询的记录的起始时间 该属性设为null,查询enddate之前一日之内的水文数据
     * enddate 为要查询的记录的起始时间 该属性设为null,查询startdate之后的全部水文数据
     * startdate、enddate都设为null,查询最近一日之内的水文数据
     * @param qp 远程调用参数
     * @return 返回取得的所有基本数据
     * @throws Exception 
     */

    public List<StRiverR> getWaterStationSpaceProperties(QueryParams qp) throws Exception
    {
        StringBuffer sb=new StringBuffer();
        StringBuffer where=new StringBuffer();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        System.out.println();
        Date sDate=qp.getStartDate();
        Date eDate=qp.getEndDate();
        sb.append("From StRiverR striverr where ");
        if(qp.getStcd()!=null)
            sb.append("striverr.id.stcd in ( :ids ) and ");// and striverr.id.tm between :startDateTime and :endDateTime
        if(sDate!=null&&eDate!=null){
            where.append("striverr.id.tm between :startDateTime and :endDateTime");
        }else if(sDate!=null){
            where.append("striverr.id.tm > :startDateTime");
        }else if(eDate!=null){
            sDate=new Date(eDate.getDate());
            eDate=new Date();
            eDate.setDate(eDate.getDate()+1);
            where.append("striverr.id.tm between :startDateTime and :endDateTime");
        }else{
            sDate=new Date();
            sDate.setDate(new Date().getDate()-1);
            where.append("striverr.id.tm > :startDateTime");
        }
        sb.append(where);
        System.out.println(sb);
        System.out.println(qp.getStcd());
        System.out.println(sDate);
        System.out.println(eDate);
        //'81100350','81103150'
        Map<String,Object> map = new HashMap<String,Object>();
        if(qp.getStcd()!=null)map.put("ids", qp.getStcd());
        if(sDate!=null)map.put("startDateTime",qp.getStartDate());
        if(eDate!=null)map.put("endDateTime",qp.getEndDate());
        if(sDate==null&&eDate==null)map.put("startDateTime",qp.getStartDate());
        ApplicationContext actx=new ClassPathXmlApplicationContext("applicationContext.xml");
        CommonDao cd=(CommonDao) actx.getBean("CommonDaoStu");
        List list=cd.query(sb.toString(),map);
        return list;
    }

    public List<StRiverR> getRWaterData(QueryParams qp){
        List list=null;
        return list;
    }
}

原文地址:https://www.cnblogs.com/weisteve/p/2308123.html