国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Hibernate訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)

2019-11-18 12:11:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、Hibernate訪問(wèn)數(shù)據(jù)庫(kù)時(shí)加載的過(guò)程

對(duì)于大多數(shù)使用Hibernate的朋友來(lái)說(shuō),通常使用一下方式來(lái)獲得Configuration實(shí)例: Configuration configure = new Configuration().configure();

在Hibernate中,Configuration是hibernate的入口。在實(shí)例化一個(gè)Configuration的時(shí)候,Hibernate會(huì)自動(dòng)在環(huán)境變量(classpath)里面查找Hibernate配置文件hibernate.PRoperties。假如該文件存在,則將該文件的內(nèi)容加載到一個(gè)Properties的實(shí)例GLOBAL_PROPERTIES里面,假如不存在,將打印信息  hibernate.properties not found;

接下來(lái)Hibernate將所有系統(tǒng)環(huán)境變量(System.getProperties())也添加到GLOBAL_PROPERTIES里面。假如配置文件hibernate.properties存在,系統(tǒng)還會(huì)進(jìn)一步驗(yàn)證這個(gè)文件配置的有效性,對(duì)于一些已經(jīng)不支持的配置參數(shù),系統(tǒng)將打印出警告信息。

默認(rèn)狀態(tài)下configure()方法會(huì)自動(dòng)在環(huán)境變量(classpath)下面尋找Hibernate配置文件hibernate.cfg.xml,假如該文件不存在,系統(tǒng)會(huì)打印如下信息并拋出HibernateException異常: hibernate.cfg.xml not found;假如該文件存在,configure()方法會(huì)首先訪問(wèn)<session-factory>,并獲取該元素name的屬性,假如name的屬性非空,將用這個(gè)配置的值來(lái)覆蓋hibernate.properties的hibernate.session_factory_name的配置的值,從這里我們可以看出,hibernate.cfg.xml里面的配置信息可以覆蓋hibernate.properties的配置信息。

接下來(lái)configure()方法訪問(wèn)<session-factory>的子元素,首先將使用所有的<property>元素配置的信息來(lái)覆蓋hibernate.properties里面對(duì)應(yīng)的配置信息。
然后configure()會(huì)依次訪問(wèn)以下幾個(gè)元素的內(nèi)容
<mapping>
<jcs-class-cache>
<jcs-collection-cache>
<collection-cache>


其中<mapping>是必不可少的,必須通過(guò)配置<mapping>,configure()才能訪問(wèn)到我們定義的java對(duì)象和關(guān)系數(shù)據(jù)庫(kù)表的映射文件(hbm.xml),例如:
<mapping resource="Cat.hbm.xml"/>

這樣configure()方法利用各種資源就創(chuàng)建了一個(gè)Configuration實(shí)例。對(duì)于整個(gè)項(xiàng)目來(lái)說(shuō),假如用一個(gè)本地線程來(lái)存放這個(gè)Configuration實(shí)例,那么整個(gè)項(xiàng)目只需要實(shí)例化一次Configuration對(duì)象(注:Configuration實(shí)例很花費(fèi)時(shí)間),也就提高了項(xiàng)目的效率。

二、Hibernate訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的配置
根據(jù)以上所述,configure()方法默認(rèn)是通過(guò)訪問(wèn)hibernate.cfg.xml的<mapping>元素來(lái)加載我們提供的.hbm.xml文件。我們也可以直接指定hbm.xml文件,例如addClass()方法可以直接通過(guò)指定class來(lái)加載對(duì)應(yīng)的映射文件,hibernate會(huì)將提供的class的全名(包括package)自動(dòng)轉(zhuǎn)化為文件路徑,還可以用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配置來(lái)配置多個(gè)數(shù)據(jù)庫(kù)的話,那就寫多個(gè)配置文件。這里假設(shè)對(duì)應(yīng)兩個(gè)數(shù)據(jù)庫(kù)(一個(gè)是MySQL,一個(gè)是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,多數(shù)據(jù)庫(kù)就更簡(jiǎn)單了,像這段代碼可以完成所有配置:
<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訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的一般方法,hibernate還有很多可行的配置,有愛(ài)好的讀者可以參考它的reference。

關(guān)于作者:
楊曉,北京工商大學(xué)計(jì)算機(jī)碩士,曾在NEC-SI、Softbrain 擔(dān)任java開發(fā)工作。
博客:http://blog.sina.com.cn/u/1237288325

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沂源县| 朔州市| 四子王旗| 炉霍县| 乌拉特前旗| 义马市| 大名县| 炎陵县| 固原市| 齐河县| 镇赉县| 电白县| 柏乡县| 广安市| 张家界市| 义马市| 和平区| 金昌市| 沅江市| 卢湾区| 邢台县| 额济纳旗| 当涂县| 广丰县| 台北市| 宁都县| 四会市| 缙云县| 醴陵市| 泗水县| 敖汉旗| 宁明县| 台北市| 正宁县| 夏邑县| 凤凰县| 巧家县| 石首市| 洛扎县| 大英县| 呈贡县|