ZhipSoft.com
              冬去春來
                  鄭重聲明:本Blog純屬個人學習、工作需要,記錄相關資料。請不要發表任何有人身攻擊的言論,謝謝!!www.ZhipSoft.com
          posts - 94,comments - 149,trackbacks - 0

          一、 ???????????? 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();

          如果你用 spring ,多數據庫就更簡單了,像這段代碼可以完成所有配置:
          <beans>
          <bean id="mysqlDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="url">
          <value>jdbc:mysql://localhost:3306/test</value>
          </property>
          <property name="driverClassName">
          <value>org.gjt.mm.mysql.Driver</value>
          </property>
          <property name="username">
          <value>root</value>
          </property>
          <property name="password">
          <value>123</value>
          </property>
          </bean>

          <bean id="mysqlFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref local="mysqlDS"/>
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
          </props>
          </property>
          <property name="mappingResources">
          <list>
          <value>test.hbm.xml</value>
          </list>
          </property>
          </bean>

          <bean id="sqlserverDS" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          <property name="url">
          <value>jdbc:odbc:test</value>
          </property>
          <property name="driverClassName">
          <value>sun.jdbc.odbc.JdbcOdbcDriver</value>
          </property>
          <property name="username">
          <value>root</value>
          </property>
          <property name="password">
          <value>123</value>
          </property>
          </bean>

          <bean id="sqlserverFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <property name="dataSource">
          <ref local="sqlserverDS"/>
          </property>
          <property name="hibernateProperties">
          <props>
          <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
          </props>
          </property>
          <property name="mappingResources">
          <list>
          <value>test.hbm.xml</value>
          </list>
          </property>
          </bean>
          .......
          </beans>

          以上只是配置 Hibernate 訪問多個數據庫的一般方法, hibernate 還有很多可行的配置,有興趣的讀者可以參考它的 reference



                  本Blog純屬個人學習、工作需要,記錄相關資料。請不要發表任何有人身攻擊的言論,謝謝! www.zhipsoft.cn
          posted on 2007-01-03 10:37 ZhipSoft 閱讀(792) 評論(0)  編輯  收藏 所屬分類: Hibernate

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 集安市| 隆昌县| 迁安市| 闵行区| 永仁县| 姜堰市| 友谊县| 正定县| 屏东县| 乐至县| 东莞市| 崇礼县| 寻甸| 南澳县| 静乐县| 名山县| 元江| 松溪县| 贵阳市| 阿拉善盟| 东乡族自治县| 石屏县| 额尔古纳市| 海城市| 莱阳市| 陆河县| 丹寨县| 庄浪县| 常山县| 龙井市| 鲁山县| 镇平县| 安福县| 鹤壁市| 金湖县| 阿拉善右旗| 玉田县| 南丰县| 黄浦区| 天津市| 澄迈县|