1 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。
(1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并創(chuàng)建SessionFactory對(duì)象。Configuration對(duì)象用于配置并且啟動(dòng)Hibernate。Hibernate應(yīng)用通過Configuration實(shí)例來指定對(duì)象--關(guān)系映射文件的位置或者動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory實(shí)例。
(2)SessionFactory:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,創(chuàng)建Session對(duì)象。一個(gè)SessinFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源,應(yīng)用從SessionFactory中獲得Session實(shí)例。如果應(yīng)用同時(shí)訪問多個(gè)DB,怎需要為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)單獨(dú)的SessionFactory實(shí)例。
(3)Session:也被稱為持久化管理器,對(duì)象級(jí)數(shù)據(jù)庫(kù)操作。
特點(diǎn):
1)不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享同一個(gè)Session實(shí)例。
2)Session實(shí)例是輕量級(jí)的,所謂輕量級(jí),是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建或銷毀Session對(duì)象,例如為每個(gè)客戶請(qǐng)求分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單位分配單獨(dú)的Session實(shí)例。
3)通常將每一個(gè)Session實(shí)例和一個(gè)DB事務(wù)邦定,也就是說,每執(zhí)行一個(gè)DB事務(wù),都應(yīng)該先創(chuàng)建一個(gè)新的Session實(shí)例,不論事務(wù)執(zhí)行成功與否,最后都應(yīng)該調(diào)用Session的close()方法,從而釋放Session實(shí)例占用的資源。
注:每個(gè)Session實(shí)例都有自己的緩存,這個(gè)Session實(shí)例的緩存只能被當(dāng)前的工作單元訪問。
(4)Query:執(zhí)行數(shù)據(jù)庫(kù)查詢操作。要使用HQL(HibernateQueryLanguage)查詢語句,HQL查詢語句是面向?qū)ο?/a>的,它引用類名及類的屬性名。
(5)Transaction:用于管理操作事務(wù)。它對(duì)底層的事務(wù)接口做了封裝,底層事務(wù)接口包括:JDBC API、JTA(JavaTransactionAPI)、CORBA(CommonObjectRequestBroker Architecture)API。
3.Hibernate的5個(gè)核心類或接口:
(1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并創(chuàng)建SessionFactory對(duì)象。Configuration對(duì)象用于配置并且啟動(dòng)Hibernate。Hibernate應(yīng)用通過Configuration實(shí)例來指定對(duì)象--關(guān)系映射文件的位置或者動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory實(shí)例。
(2)SessionFactory:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,創(chuàng)建Session對(duì)象。一個(gè)SessinFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源,應(yīng)用從SessionFactory中獲得Session實(shí)例。如果應(yīng)用同時(shí)訪問多個(gè)DB,怎需要為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)單獨(dú)的SessionFactory實(shí)例。
(3)Session:也被稱為持久化管理器,對(duì)象級(jí)數(shù)據(jù)庫(kù)操作。
特點(diǎn):
1)不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享同一個(gè)Session實(shí)例。
2)Session實(shí)例是輕量級(jí)的,所謂輕量級(jí),是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建或銷毀Session對(duì)象,例如為每個(gè)客戶請(qǐng)求分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單位分配單獨(dú)的Session實(shí)例。
3)通常將每一個(gè)Session實(shí)例和一個(gè)DB事務(wù)邦定,也就是說,每執(zhí)行一個(gè)DB事務(wù),都應(yīng)該先創(chuàng)建一個(gè)新的Session實(shí)例,不論事務(wù)執(zhí)行成功與否,最后都應(yīng)該調(diào)用Session的close()方法,從而釋放Session實(shí)例占用的資源。
注:每個(gè)Session實(shí)例都有自己的緩存,這個(gè)Session實(shí)例的緩存只能被當(dāng)前的工作單元訪問。
(4)Query:執(zhí)行數(shù)據(jù)庫(kù)查詢操作。要使用HQL(HibernateQueryLanguage)查詢語句,HQL查詢語句是面向?qū)ο?/a>的,它引用類名及類的屬性名。
(5)Transaction:用于管理操作事務(wù)。它對(duì)底層的事務(wù)接口做了封裝,底層事務(wù)接口包括:JDBC API、JTA(JavaTransactionAPI)、CORBA(CommonObjectRequestBroker Architecture)API。
二、工作原理
1.Hibernate 的初始化.
讀取Hibernate 的配置信息-〉創(chuàng)建Session Factory
1)創(chuàng)建Configeration類的實(shí)例。
它的構(gòu)造方法:將配置信息(Hibernate config.xml)讀入到內(nèi)存。
一個(gè)Configeration 實(shí)例代表Hibernate 所有Java類到Sql數(shù)據(jù)庫(kù)映射的集合。
2)創(chuàng)建SessionFactory實(shí)例
把Configeration 對(duì)象中的所有配置信息拷貝到SessionFactory的緩存中。
SessionFactory的實(shí)例代表一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)員源,創(chuàng)建后不再與Configeration 對(duì)象關(guān)聯(lián)。
緩存(cache):指Java對(duì)象的屬性(通常是一些集合類型的屬性--占用內(nèi)存空間。
SessionFactory的緩存中:Hibernate 配置信息。OR映射元數(shù)據(jù)。
緩存-大:重量級(jí)對(duì)象 小:輕量級(jí)對(duì)象
3)調(diào)用SessionFactory創(chuàng)建Session的方法
1】用戶自行提供JDBC連接。
Connection con=dataSource.getConnection();
Session s=sessionFactory.openSession(con);
2】讓SessionFactory提供連接
Session s=sessionFactory.openSession();
4)通過Session 接口提供的各種方法來操縱數(shù)據(jù)庫(kù)訪問
添加回答
舉報(bào)