NHibernate概括
? ?什么是?NHibernate?NHibernate是一個(gè)面向.NET環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具。
對象/關(guān)系數(shù)據(jù)庫映射(object/relational mapping,ORM)這個(gè)術(shù)語表示一種技術(shù),用來把對象模型表示的對象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。
什么是ORM?對象-關(guān)系映射(Object/Relation Mapping。簡稱ORM),是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今企業(yè)級應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法。關(guān)系數(shù)據(jù)庫是企業(yè)級應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對多關(guān)聯(lián)和繼承關(guān)系。因此。對象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。
面向?qū)ο笫菑能浖roject基本原則(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的。兩套理論存在顯著的差別。
為了解決這個(gè)不匹配的現(xiàn)象,對象關(guān)系映射技術(shù)應(yīng)運(yùn)而生。
NHiberante的優(yōu)缺點(diǎn)
長處
(1).面向?qū)ο?#xff1a;NHiberante的使用時(shí)僅僅須要操縱對象。使開發(fā)更對象化,拋棄了數(shù)據(jù)庫中心的思想,全然的面向?qū)ο笏枷搿?/p>
(2).透明持久化:帶有持久化狀態(tài)的、具有業(yè)務(wù)功能的單線程對象,此對象生存期非常短。這些對象可能是普通的POCO。這個(gè)對象沒有實(shí)現(xiàn)第三方框架或者接口,唯一特殊的是他們正與(只一個(gè))Session相關(guān)聯(lián)。一旦這個(gè)Session被關(guān)閉,這些對象就會(huì)脫離持久化狀態(tài)。這樣就可被應(yīng)用程序的不論什么層自由使用。
(比如,用作跟表示層打交道的傳輸數(shù)據(jù)對象。
)
(3).它沒有侵入性,即所謂的輕量級框架。
正由于它具有透明持久化的長處。它才沒有侵入性。才是一個(gè)輕量級框架。
恒定一個(gè)框架為重量級、還是輕量級,是依據(jù)其侵入性而定奪的。而NHibernate就是一個(gè)輕量級ORM框架。
(4).較好的移植性:支持多種數(shù)據(jù)庫。便于數(shù)據(jù)庫的遷移。
(5).緩存機(jī)制:提供一、二級緩存和查詢緩存。
(6).開發(fā)效率:眾所周知,使用NHibernate能夠簡化程序開發(fā),從而達(dá)到高速開發(fā)的目的。作為軟件公司,項(xiàng)目管理的關(guān)鍵就是控制開發(fā)成本。正由于使用NHibernate后所寫的代碼量降低了,相對于原先使用“SqlHelper、DAL、BLL”開發(fā)程序的項(xiàng)目周期縮短了,成本就降低了。
?
缺點(diǎn)
(1).內(nèi)存消耗:直接使用“SqlHelper、DAL、BLL”無疑是最省內(nèi)存的。使用NHibernate后。內(nèi)存開銷比較大。這點(diǎn)是毋庸置疑的。
(2).批量數(shù)據(jù)庫的處理:因?yàn)镹Hibernate是基于面向?qū)ο蟮腛RM框架。處理數(shù)據(jù)庫的方式是針對單個(gè)對象的。
對數(shù)據(jù)庫的增、刪、改都是正對一條記錄而言。對于批量改動(dòng)、刪除數(shù)據(jù)。不適合用NHiberante。這也是全部OR框架弱點(diǎn)。其原因,我覺得是在于與緩存機(jī)制的沖突。
(3).較多使用數(shù)據(jù)庫特性時(shí)。也不適合使用NHiberante。
如數(shù)據(jù)庫中大量的存儲過程、觸發(fā)器、特點(diǎn)的SQL語句。
(4).表關(guān)系比較混亂時(shí)也不適合使用NHiberante。
NHibernate僅僅適合于表與表的關(guān)系比較明白的環(huán)境中。
如本應(yīng)該建立外鍵的。沒有建立外鍵。這時(shí)使用NHiberante不僅沒有降低工作量。反而添加了工作量。
(5).學(xué)習(xí)成本:相對于NHibernate來說,使用“SqlHelper、DAL、BLL”操作數(shù)據(jù)庫,學(xué)習(xí)成本比較低,并且上手非??臁J褂肗Hibernate須要有一定OOP(面向?qū)ο缶幊?和OOD(面向?qū)ο笤O(shè)計(jì))的基礎(chǔ)。這對于基礎(chǔ)薄弱的程序猿來說,從面向過程的編程到面向?qū)ο蟮木幊?。須要一定的投?#xff1b;普通情況下須要學(xué)習(xí)1個(gè)月左右的時(shí)間才可以深入NHiberante。
總結(jié)
以上是生活随笔為你收集整理的NHibernate概括的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: quartz+spring框架动态调整频
- 下一篇: 重载与覆盖的差别