天天看點

淺談hibernate+入門執行個體

    Hibernate是對jdbc進一步的封裝,随着項目的開展,小編開始接觸到這個概念,一開始接觸的時候并沒有覺得hibernate有多神秘,沒有進一步的研究,隻是簡單的知道她是對jdbc的進一步的封裝,可是這并不是學習的目的,到了目前這個學習的階段,所有的知識都應該精益求精,而不僅僅是停留在知道和使用這個層面上,那麼hibernate是什麼?她是幹什麼的?為什麼會出現hibernate?她又有着怎麼樣的優缺點呢?今天這篇博文小編就從這幾個方面對hibernate進行一個簡單的總結,希望對有需要的小夥伴有幫助,還請小夥伴們多多指教哦`(*∩_∩*)′!

    Hibernate是什麼?

    Hibernate是一個開放源代碼的對象關系映射架構,她對JDBC進行了非常輕量級的對象封裝,使得java程式員可以随心所欲的使用對象程式設計思維來操縱資料庫,hibernate可以應用在任何使用JDBC的場合,既可以在java的用戶端程式使用,也可以在Servlet/jsp中的Web應用中使用,最具革命意義的,hibernate可以在應用的EJB的j2ee架構中取代cmp,完成資料持久化的重任。

    有意思的是hibernate翻譯成中文的意思是冬眠,雖然現在已經是三月份,但是北方依舊是冷飕飕的`(*∩_∩*)′,冬眠嘛,需要睡很長的時間,這就跟我們的持久化不謀而合,持久化是将程式資料在持久狀态和瞬時狀态間轉換的機制,通俗的講,就是好瞬時資料(比如記憶體中的資料,是不能永久儲存的)持久化為持久資料(比如持久化至資料庫中,能夠長久儲存)。在我們的實際生活中,也有很多持久化的方法,比如說,我們會将鮮肉冷藏,吃的時候再解凍;将水果做成罐頭的方法也是;将人的髒器迅速冷凍,運輸,然後解凍給人移植的技術也是。

    hibernate怎麼用?

    Hibernate主要用來實作Java對象和表之間的映射,除此之外還提供還提供資料查詢和擷取資料的方法,可以大幅度減少開發時人工使用SQL和JDBC處理資料的時間。hibernate的目标是對于開發者通常的資料持久化相關的程式設計任務,解放其中的百分之九十五,對于以資料為中心的程式來說,她們往往隻在資料庫中使用存儲過程來實作商業邏輯,hibernate可能不是最好的解決方法,對于那些在基于java的中間層應用中,她們實作面向對象業務模型中和商業邏輯的應用,hibernate是最有用的,hibernate可以幫助我們消除或者包裝那些針對特定廠商的SQL代碼并且幫你把結果集從表格格式的表示形式轉換到一系列的對象去。如下一張簡單的圖,我們來看一下hibernate的工作原理:

淺談hibernate+入門執行個體

    結合上面的執行過程圖,小編來簡單的描述一下hibernate的運作過程,首先,應用程式先調用Configration類,該類讀取hibernate的配置檔案及映射檔案中的資訊,并用這些資訊生成一個SessionFactory對象,接着,從SessionFacctory對象生成一個Session對象,并用Session對象生成Transaction對象,可通過Session對象的get()、load()、sava()、update()、delete()和saveOrupdate()等方法對PO進行加載,儲存,更新,删除等操作;在查詢的情況下,可通過Session對象生成一個Query對象,然後利用Query對象執行查詢操作,如果沒有異常,Transaction對象将送出這些操作結果到資料庫中。

    Hibernate的優缺點

    優點:

    一、更加對象化

    以對象化的思維操作資料庫,我們隻需要操作對象就可以了,開發更加對象化。

    二、移植性

    因為Hibernate做了持久層的封裝,你就不知道資料庫,你寫的所有的代碼都具有可複用性。

    三、Hibernate是一個沒有侵入性的架構,沒有侵入性的架構我們稱為輕量級架構。對比Struts的Action和ActionForm,都需要繼承,離不開Struts。Hibernate不需要繼承任何類,不需要實作任何接口。這樣的對象叫POJO對象。測試更加友善,提高了效率。

    缺點:

    一、由于對持久層封裝過于完整,導緻開發人員無法對SQL進行優化,無法靈活使用JDBC的原生SQL,Hibernate封裝了JDBC,是以沒有JDBC直接通路資料庫效率高。要使用資料庫的特定優化機制的時候,不适合用Hibernate 

    二、架構中使用ORM原則,導緻配置過于複雜,一旦遇到大型項目,比如300張表以上,配置檔案和内容是非常龐大的,另外,DTO滿天飛,性能和維護問題随之而來

    三、如果項目中各個表中關系複雜,表之間的關系很多,在很多地方把lazy都設定false,會導緻資料查詢和加載很慢,尤其是級聯查詢的時候。

    四、Hibernate在批量資料處理時有弱勢,對于批量的修改,删除,不适合用Hibernate,這也是ORM架構的弱點。接着,結合小編目前的項目,做一個簡單的執行個體,來幫助我們更好的來了解hibernate。

    Hibernate執行個體

    首先,第一步建議實體類User.java,具體代碼如下所示:

       第二步,提供User.hbm.xml檔案,完成類映射,具體代碼如下所示:     

      第三步,将User.hbm.xml檔案加入到hibernate.cfg.xml檔案中,代碼如下所示:    

        第四步,編寫工具類ExportDB.java,将hbm生成ddl,也就是hbm2ddl,代碼如下所示:

        測試之前,要提前建立資料庫hibernate_first,測試如下;控制台列印的SQL語句:

        資料庫表結構,如下圖所示:

淺談hibernate+入門執行個體

         建立用戶端類Client,添加使用者資料到mySQL

      右鍵debug運作,測試完成之後,我們查詢一下測試結果:

淺談hibernate+入門執行個體

       小編寄語:該博文,小編主要簡單的介紹了一下hibernate,以及hibernate的一個簡單的執行個體,從例子我們可以看出來,我們隻是使用Hibernate對User這一個實體進行了映射,比較簡單,但是完全不符合實際。如何像關系型資料庫一樣表示多種關聯關系,例如:一對一,一對多,多對多等等,我們還需要深入。下篇博文,我們介紹Hibernate的基本映射原理以及關聯關系映射。同樣的在代碼中沒有涉及到任何有關JDBC的代碼,作為開發人員隻需要寫好相應的實體類,然後通過配置就可以實作了表的建立以及向表中實作資料的插入。在代碼中有許多Hibernate的核心對象,例如Configuration、SessionFactory、Session等等,在後面的博文中小編會陸續的介紹,盡請期待`(*∩_∩*)′!