引言
對應用程序還說,大部分都會涉及到訪問數據庫,將數據持久化到數據庫的問題。目前Java中共有5種常用的實現持久化的模式,分別是:JDBC直接訪問數據庫、主動域對象模式、CMP模式、ORM模式、JDO模式。而hibernate正是運用ORM模式的一種框架,它憑藉自身爲輕量級ORM 模型的優勢,逐步確立了在 Java ORM 架構中領導地位,甚至取代複雜而又繁瑣的 EJB 模型而成爲事實上的 Java ORM 工業標準。
hibernate的優點
1、Hibernate是一個開放源代碼的對象關係映射框架。
2、它對JDBC進行了非常輕量級的對象封裝,沒有侵入性,移植性比較好。
3、Hibernate可以應用在任何使用JDBC的場合
4、hibernate使得開發更加面向對象,大大提高了生產力
hibernate是持久化技術的一種實現,想真正理解hibernate,就必須瞭解持久化對象的三種狀態。
持久化對象的三種狀態
transient:瞬態或者自由態
它是由new命令創建的對象,與其他普通對象一樣,系統爲其開闢一塊內存空間。此時該瞬時對象在內存孤立存在,跟數據庫沒有關係,也不受session的管理。
如果長時間沒有變量對該對象進行引用,它將被java虛擬機回收。
當調用session的save()或saveOrUpdate()方法時,瞬時對象與數據庫相關聯,並將數據對應的插入數據庫中,此時該瞬時對象轉變成持久化對象。
persistent:持久化狀態
處於該狀態的對象在數據庫中存在與之對應的記錄,並擁有一個持久化標識,同時,受session的管理。
通過session的get()、load()、find()等方法生成的對象爲持久對象。
當調用session的delete()方法時,對應的持久對象就變成瞬時對象,數據庫中與之對應的數據會被刪除,該對象不再與數據庫的記錄關聯。
當調用session的close()或clear()、evict()之後,持久對象變成脫管對象。
detached:脫管狀態或者遊離態
脫管對象一定是由持久對象轉化而來,它同樣不受session管理,但與瞬時態對象不同的是,脫管對象仍然擁有數據庫的識別值,也就是數據庫中存在與之對應的數據,所以脫管對象可以執行update方法。
當調用session的update()、saveOrUpdate()、lock()方法,脫管對象轉變成持久對象。
同瞬時態對象一樣,如果長時間沒有變量對該對象進行引用,它將被java虛擬機回收。
Hibernate中核心5個接口
1、Configuration
Configuration接口負責配置並啓動Hibernate,創建SessionFactory對象。它是在你開始使用Hibernate時遇到的第一個對象。
2、SessionFactory
(1)SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。
(2)SessionFactory的創建非常消耗資源,整個應用一般只要一個SessionFactory就夠了,只有多個數據庫的時候纔會使用多個SessionFactory。
(3)SessionFactory是線程安全的,可以由多個線程訪問SessionFactory共享。
3、Session(會話)
Session接口被稱爲持久化管理器,主要負責執行被持久化對象的CRUD操作(增刪改查)。但是Session對象是非線程安全的。所以一般一線程一session。它代表與數據庫之間的一次操作。Session通過SessionFactory打開,事務提交後就該關閉,否則再使用可能會發生問題。
4、Transaction接口
Transaction接口是Hibernate的數據庫事務接口,它對底層的事務接口做了封裝,使得Hibernate應用可通過一致的Transaction接口來聲明事務邊界,有助於應用在不同的環境容器中移植。
5、Query和Criteria接口
Query和Criteria接口是Hibernate的查詢接口,用於向數據庫查詢對象,以及控制執行查詢的過程。它可以使用HQL語言或SQL語句兩種表達方式。
hibernate的幾種映射
hibernate有基本映射、一對一映射、一對多映射、多對一映射、繼承映射、複合主鍵映射、Component映射和集合映射。映射是hibernate中的重點內容,但不是本篇要說的重點,這裏只是宏觀的總結一下。
hibernate的缺點
1、對數據庫操作的封裝比較徹底,導致針對數據庫特性的語句,調優比較困難。
2、對大批量數據更新存在問題
3、不適用於大量查詢統計的業務中。
總結
hibernate只是衆多框架中的一員,說到底,框架還是幫我們實現某一目標的工具,而任何工具都不是萬能的。明確自己的目的,擇優選擇工具。