什麼是hibernate?
hibernate在英文中是冬眠的意思,當冬季來臨,世界萬物開始準備冬眠,但是程式猿這種動物好像不冬眠,因為需求變了,要改bug,冬眠,對于對象來說就是持久化。什麼叫做持久化呢?持久化,就是把資料(如記憶體中的對象)儲存到可永久儲存的儲存設備中,比如磁盤,持久化的主要應用就是将記憶體中的對象存儲在資料庫中,或者存儲在磁盤檔案中、xml檔案中等等。持久化是将程式資料在持久狀态和瞬時狀态間轉換的機制。JDBC就是一種持久化機制,檔案IO也是一種持久化機制。
在我們的生活當中,也有很多持久化的方法,比如:
a、将鮮肉冷藏,吃的時候再解凍;
b、将水果做成罐頭;
c、将人的器官迅速冷凍,運輸,然後解凍給需要的人進行移植手術。是以說嘛,學習都是來自于生活。
為了對hibernate進行更加深入的了解,我們可以從以下三個方面來幫助了解hibernate:
a、從UBD的角度
我們知道典型的三層架構有:U層、B層、D層;分别是表示層、業務層、持久層;hibernate就相當于我們之前接觸過的D層,也就是持久層架構,持久層架構有很多比如mybatis、EJB等。
b、hibernate是一個開源的ORM架構
ORM,對象關系映射,是一種程式技術,用于實作面向對象程式設計語言裡面不同類型系統的資料之間的轉換,從效果上來說,ORM就是建立了一個可在程式設計語言裡使用的虛拟對象資料庫,簡單來說,她起到的作用就是在關系型資料庫和對象之間做一個映射,從對象映射到關系,再從關系映射到對象,這樣,我們操作資料庫的時候,不需要再和SQL打交道,隻要像操作對象一樣操作她就可以了
c、hibernate是對jdbc的進一步封裝
還記得敲機房個人重構的時候,沒有使用hibernate,存在很多的備援部分,各種JDBC語句,so為了順應時代的發展,我們把JDBC包裝了一下下,這樣,我們可以不用操作資料,直接操作她就ok了。
hibernate的優缺點
優點:
a、更加對象化
使用的時候隻需要操作對象,是開發更加對象化,抛棄了據庫中心的思想,完全的面向對象思想。
b、持久化
帶有持久化狀态的、具有業務功能的單線程對象,此對象生存期很短。這些對象可能是普通的JavaBeans/POJO,這個對象沒有實作第三方架構或者接口,唯一特殊的是他們正與(僅僅一個)Session相關聯。一旦這個Session被關閉,這些對象就會脫離持久化狀态,這樣就可被應用程式的任何層自由使用。(例如,用作跟表示層打交道的資料傳輸對象。)
c、沒有侵入性,即所謂的輕量級架構。
d、移植性很好。
e、緩存機制,提供一級緩存和二級緩存。
f、簡潔的HQL程式設計。
g、送出生産力。
缺點:
a、使用資料庫特性的語句,将很難調優
b、對大批量資料更新存在問題
c、系統中存在大量的攻擊查詢功能
d、不适合批量操作,這也是OR架構的弱點;要使用資料庫的特定優化機制的時候,不适合用Hibernate。 e、效率比jdbc略差
hibernate和mybatis
相同點:Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置檔案生成SessionFactory,然後由SessionFactory 生成Session,最後由Session來開啟執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
不同點:
mybatis:小巧、友善、高效、簡單、直接、半自動
hibernate:強大、友善、高效、複雜、繞彎子、全自動
mybatis:
a、 入門簡單,即學即用,提供了資料庫查詢的自動對象綁定功能,而且延續了很好的SQL使用經驗,對于沒有那麼高的對象模型要求的項目來說,相當完美。
b、 可以進行更為細緻的SQL優化,可以減少查詢字段。
c、 缺點就是架構還是比較簡陋,功能尚有缺失,雖然簡化了資料綁定代碼,但是整個底層資料庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易适應快速資料庫修改。
d、 二級緩存機制不佳。
hibernate:
a、功能強大,資料庫無關性好,O/R映射能力強,如果你對Hibernate相當精通,而且對Hibernate進行了适當的封裝,那麼你的項目整個持久層代碼會相當簡單,需要寫的代碼很少,開發速度很快,非常爽。
b、有更好的二級緩存機制,可以使用第三方緩存。
c、缺點就是學習門檻不低,要精通門檻更高,而且怎麼設計O/R映射,在性能和對象模型之間如何權衡取得平衡,以及怎樣用好Hibernate方面需要你的經驗和能力都很強才行。
舉個形象的比喻:
mybatis:機械工具,使用友善,拿來就用,但工作還是要自己來作,不過工具是活的,怎麼使由我決定。
hibernate:智能機器人,但研發它(學習、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。
hibernate開發以及環境搭建
前面的部分小編主要簡單的介紹了hibernate的相關理論知識,接下來,理論聯系實踐,小編做一個簡單的demo,希望可以幫助小夥伴們更好的掌握hibernate,不足之處,還請小夥伴多多指教。
c、提供核心配置檔案hibernate.cfg.xml檔案(在src檔案夾下即可),其中的配置如下(針對mysql),小夥伴們可以自己查查其他的資料庫該如何進行配置。ok下面開始demo:
第一步、編寫hibernate.cfg.xml檔案,完成基本的配置,代碼如下:
第二步、建立實體類User.java代碼如下所示:
第三步、編寫User.hbm.xml檔案,完成實體類的映射,具體代碼如下所示:
第四步、将User.hbm.xml檔案加入到hibernate.cfg.xml檔案中,代碼如下所示:
第五步、編寫工具類ExoprtDB.java,将hbm生成ddl,也就是hbm2ddl,代碼如下所示:
第六步、建立用戶端類Client,添加使用者資料到myslq,代碼如下所示:
最後,讓我們一起來看看效果,如下截圖所示:

小編寄語:該博文小編主要簡單的介紹了hibernate的相關知識,介紹了什麼是hibernate、hibernate的優缺點、hibernate和mybatis的對象,最後簡單的介紹了一個入門的demo,通過上面的demo我們可以看出,在代碼中沒有涉及到任何有關JDBC的代碼,作為開發人員隻需要寫好相應的實體類,然後通過配置就可以實作了表的建立以及向表中實作資料的插入。在代碼中有許多Hibernate的核心對象,例如Configuration、SessionFactory、Session等等,随着學習的深入,這些内容小編都會一一相關介紹,SSH之旅,未完待續......