說到hibernate,英文意思:冬眠。給我印象最深的是孫文琴老師的那本hibernate深入詳解分頁上的那句話"let you java object hibernate in the relation database"。其實后邊學(xué)完了再回頭看這句話的時候就發(fā)現(xiàn)其實這句話說的很形象,它深刻的反映了hibernate在軟件開發(fā)中的重要作用:ORM(object relation mapping 對象關(guān)系映射),那么要學(xué)習(xí)hibernate首先需要了解的就是ORM。
所謂ORM的解釋,可以從維基百科中查到:
對象關(guān)系映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式設(shè)計技術(shù),用于實現(xiàn)面向?qū)ο?/font>編程語言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實是創(chuàng)建了一個可在編程語言里使用的“虛擬對象數(shù)據(jù)庫”。如今已有很多免費和收費的ORM產(chǎn)品,而有些程序員更傾向于創(chuàng)建自己的的ORM工具。
面向?qū)ο笫菑?a class="mw-redirect" title="軟件工程" href="/wiki/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B">軟件工程基本原則(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。為了解決這個不匹配的現(xiàn)象,對象關(guān)系映射技術(shù)應(yīng)運而生。
簡單的說:ORM相當(dāng)于中繼數(shù)據(jù)。具體到產(chǎn)品上,例如下邊的ADO.NET Entity Framework。DLINQ中實體類的屬性[Table]就算是一種中繼數(shù)據(jù)。
對象關(guān)系映射成功運用在不同的面向?qū)ο蟪志脤赢a(chǎn)品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO,TJDO,Active Record,NHibernate,ADO.NET Entity Framework 等。
以上是維基百科中解釋。所的很官僚,就是說的我們大家一般的人不太能理解。我個人的理解就是:對我們這些對JDBC常用操作非常厭倦的人來了個封裝,然后給我們各種常用的接口,而且讓我們感覺不到我們在操縱數(shù)據(jù)庫,而只是在調(diào)人家給的接口,這無形中讓我們感覺到很舒服,很愜意。
hibernate同樣是ORM工具,那么它給我們提供了那些接口呢?讓我列舉幾個:
Session、負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。)。
SessionFactory、負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建Session對象。這里用到了工廠模式
Transaction、 負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計編寫自己的底層事務(wù)處理代碼
Query、Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語言或SQL語句兩種表達(dá)方式
Configuration、負(fù)責(zé)配置并啟動Hibernate,創(chuàng)建SessionFactory對象。