1.Hibernate 的初始化.
讀取Hibernate 的配置信息-〉創建Session Factory
1)創建Configeration類的實例:
它的構造方法:將配置信息(Hibernate config.xml)讀入到內存。
一個Configeration 實例代表Hibernate 所有Java類到Sql數據庫映射的集合。
2)創建SessionFactory實例:
把Configeration 對象中的所有配置信息拷貝到SessionFactory的緩存中。
SessionFactory的實例代表一個數據庫存儲員源,創建後不再與Configeration 對象關聯。
3)調用SessionFactory創建Session的方法:
1】用戶自行提供JDBC連接。
Connection con=dataSource.getConnection();
Session s=sessionFactory.openSession(con);
2】讓SessionFactory提供連接
Session s=sessionFactory.openSession();
4)通過Session 接口提供的各種方法來操縱數據庫訪問。
Hibernate 的緩存體系
一級緩存:
Session 有一個內置的緩存,其中存放了被當前工作單元加載的對象。
每個Session 都有自己獨立的緩存,且只能被當前工作單元訪問。
二級緩存:
SessionFactory的外置的可插拔的緩存插件。其中的數據可被多個Session共享訪問。
SessionFactory的內置緩存:存放了映射元數據,預定義的Sql語句。
Hibernate 中Java對象的狀態
1.臨時狀態 (transient)
特征:
1】不處於Session 緩存中
2】數據庫中沒有對象記錄
Java如何進入臨時狀態
1】通過new語句剛創建一個對象時
2】當調用Session 的delete()方法,從Session 緩存中刪除一個對象時。
2.持久化狀態(persisted)
特征:
1】處於Session 緩存中
2】持久化對象數據庫中設有對象記錄
3】Session 在特定時刻會保持二者同步
Java如何進入持久化狀態
1】Session 的save()把臨時-》持久化狀態
2】Session 的load(),get()方法返回的對象
3】Session 的find()返回的list集合中存放的對象
4】Session 的update(),saveOrupdate()使游離-》持久化
3.游離狀態(detached)
特征:
1】不再位於Session 緩存中
2】游離對象由持久化狀態轉變而來,數據庫中可能還有對應記錄。
Java如何進入持久化狀態-》游離狀態
1】Session 的close()方法
2】Session 的evict()方法,從緩存中刪除一個對象。提高性能。少用。
總結一下Hibernate的好處:
1.JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。
4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。