ORM进阶之Hibernate 的三大对象
???????ORM進(jìn)階之 ORM簡(jiǎn)單介紹
????????ORM進(jìn)階之Hibernate 簡(jiǎn)單介紹及框架搭
??????? ORM進(jìn)階之Hibernate 的三大對(duì)象
????????
??????? 我們?cè)谏弦黄┛椭兄v到了怎樣搭建一個(gè)Hibernate框架, 提到Hibernate我們就不得不說他的三大對(duì)象,Configuration,SessionFactory , Session 。下邊我們就分別來解釋一下這三大對(duì)象!
Configuration對(duì)象
?????? Configuration類用來管理我們的配置文件的信息的,通過它。我們能夠通過創(chuàng)建一個(gè)configuration實(shí)例來管理對(duì)應(yīng)的配置文檔,可是通常我們僅僅創(chuàng)建一個(gè)configuration實(shí)例。
創(chuàng)建過程 Configuration cfg =new Configuration().configure();?? 我們也能夠在configure()方法中指定hbm.xml文件的路徑。
SessionFactory對(duì)象
??????? SessionFactory 顧名思義,他是創(chuàng)建session的工廠。用來創(chuàng)建session對(duì)象,令你感到奇怪的是SessionFactory并非輕量級(jí)的。實(shí)際上它的設(shè)計(jì)者的意圖是讓它能在整個(gè)應(yīng)用中共享。典型地來說。一個(gè)項(xiàng)目通常僅僅須要一個(gè)SessionFactory就夠了,可是當(dāng)你的項(xiàng)目要操作多個(gè)數(shù)據(jù)庫時(shí)。那你必須為每一個(gè)數(shù)據(jù)庫指定一個(gè)SessionFactory。
??
?????? SessionFactory在Hibernate中實(shí)際起到了一個(gè)緩沖區(qū)的作用,它緩沖了Hibernate自己主動(dòng)生成的SQL語句和一些其他的映射數(shù)據(jù),還緩沖了一些將來有可能反復(fù)利用的數(shù)據(jù)。??
?????? 一個(gè)SessionFactory實(shí)例相應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源。應(yīng)用從SessionFactory中獲得Session實(shí)例。SessionFactory它是線程安全的,這意味著它的同一個(gè)實(shí)例能夠被應(yīng)用的多個(gè)線程共享。
?????? SessionFactory的緩存可分為兩類:內(nèi)置緩存和外置緩存。
?????? SessionFactory的內(nèi)置緩存中存放了Hibernate配置信息和映射元數(shù)據(jù)信息、同一時(shí)候也緩存了Hibernate自己主動(dòng)生成的SQL語句等;
??????? SessionFactory的外置緩存是一個(gè)可配置的緩存插件,在默認(rèn)情況下,SessionFactory不會(huì)啟用這個(gè)緩存插件。
外置緩存能存放大量數(shù)據(jù)庫數(shù)據(jù)的拷貝。外置緩存的物理介質(zhì)能夠是內(nèi)存或者硬盤
Session對(duì)象
Session對(duì)象的簡(jiǎn)單介紹
?????? Session接口對(duì)于Hibernate?? 開發(fā)者來說是一個(gè)最重要的接口。然而在Hibernate中,實(shí)例化的Session是一個(gè)輕量級(jí)的類。創(chuàng)建和銷毀它都不會(huì)占用非常多資源。
這在實(shí)際項(xiàng)目中確實(shí)非常重要,由于在客戶程序中,可能會(huì)不斷地創(chuàng)建以及銷毀Session對(duì)象,假設(shè)Session的開銷太大。會(huì)給系統(tǒng)帶來不良影響。
但值得注意的是 Session對(duì)象是非線程安全的,因此在你的設(shè)計(jì)中。最好是一個(gè)線程僅僅創(chuàng)建一個(gè)Session對(duì)象。??
???
? ? 在Hibernate的設(shè)計(jì)者的頭腦中,他們將session看作介于數(shù)據(jù)連接與事務(wù)管理一種中間接口。我們能夠?qū)ession想象成一個(gè)持久對(duì)象的緩沖區(qū)。Hibernate能檢測(cè)到這些持久對(duì)象的改變,并及時(shí)刷新數(shù)據(jù)庫。我們有時(shí)也稱Session是一個(gè)持久層管理器,由于它包括這一些持久層相關(guān)的操作,諸如存儲(chǔ)持久對(duì)象至數(shù)據(jù)庫,以及從數(shù)據(jù)庫從獲得它們。請(qǐng)注意,Hibernate?? 的session不同于JSP應(yīng)用中的HttpSession。當(dāng)我們使用session這個(gè)術(shù)語時(shí),我們指的是Hibernate中的session,而我們以后會(huì)將HttpSesion對(duì)象稱為用戶session。
?
怎樣獲得Session對(duì)象
?????? 首先創(chuàng)建SessionFactory對(duì)象,應(yīng)用server假設(shè)訪問多個(gè)數(shù)據(jù)源時(shí),則應(yīng)該產(chǎn)生多個(gè)SessionFactory;可是只為了服務(wù)與某個(gè)請(qǐng)求時(shí),不要?jiǎng)?chuàng)建一個(gè)新的SessionFactory,由于創(chuàng)建SessionFactory須要消耗大量的資源.然后依據(jù)SessionFactory再創(chuàng)建Session對(duì)象?創(chuàng)建session對(duì)象有兩種方式,各自是openSession()和getCurrentSession(),openSession,打開須要關(guān)閉。可是getCurrentSession 是不須要關(guān)閉的。他會(huì)自己主動(dòng)的關(guān)閉!
<span style="font-size:18px;">Session session=sessionFactory.openSession();Transaction tx; try{tx=session.beginTransaction();//開始一個(gè)事務(wù).......//運(yùn)行事務(wù)tx.commit(); }catch(Exceptione){//假設(shè)出現(xiàn)異常就撤消事務(wù)if(tx!=null)tx.rollback();throw e; } Finally{ //無論事務(wù)運(yùn)行成功與否,最后都關(guān)閉Session而且放在finally中以提高安全性session.close(); }</span>?????? 我們先通過configuration 讀取數(shù)據(jù)庫的一系列的配置文件,然后通過這一系列的配置信息。創(chuàng)建一個(gè)創(chuàng)建數(shù)據(jù)庫連接的工廠SessionFactory,然后通過SessionFactory 我們就能夠拿到詳細(xì)的鏈接的數(shù)據(jù)庫的對(duì)象,對(duì)數(shù)據(jù)庫進(jìn)行操作!
?
轉(zhuǎn)載于:https://www.cnblogs.com/lytwajue/p/7262475.html
總結(jié)
以上是生活随笔為你收集整理的ORM进阶之Hibernate 的三大对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kali 2017更新源
- 下一篇: 农用地备案证是什么?