標籤:
A hibernate的幾個基本類
hibernate是一個用於java訪問資料的架構,它實現了將這一操作對象化的目標。
hibernate底層依然使用的是jdbc對資料庫進行操作。
在具體操作中,有幾個比較重要的類:
Configuration,SessionFactory,Session
參考下面代碼
Configuration cfg = new Configuration(); SessionFactory sf = cfg.configure().buildSessionFactory(); Session session = sf.openSession(); session.beginTransaction(); Data s=new Data();//s是我們要儲存的執行個體 session.save(s); session.getTransaction().commit();
Configuration對象讀取預設的xml設定檔,然後產生一個SessionFactory對象
注意,對於每個程式,Configuration和SessionFactory對象都只能有一個。
而Session對象每個線程一個。
B hibernate的三種狀態
臨時狀態:由java的new命令開闢記憶體空間的java對象也就是普通的java對象,如果沒有變數引用它它將會被JVM收回。臨時對象在記憶體中是孤立存在的,它的意義是攜帶資訊載體,不和資料庫中的資料由任何的關聯。通過Session的save()方法和saveOrUpdate()方法可以把一個臨時對象和資料庫相關聯,並把臨時對象攜帶的資訊通過設定檔所做的映射插入資料庫中,這個臨時對象就成為持久化對象。
持久化狀態:持久化對象在資料庫中有相應的記錄,持久化對象可以是剛被儲存的,或者剛被載入的,但都是在相關聯的session聲明周期中儲存這個狀態。如果是直接資料庫查詢所返回的資料對象,則這些對象和資料庫中的欄位相關聯,具有相同的id,它們馬上變成持久化對象。如果一個臨時對象被持久化對象引用,也立馬變為持久化對象。
如果使用delete()方法,持久化對象變為臨時對象,並且刪除資料庫中相應的記錄,這個對象不再與資料庫有任何的聯絡。
持久化對象總是與Session和Transaction關聯在一起,在一個session中,對持久化對象的操作不會立即寫到資料庫,只有當Transaction(事務)結束時,才真正的對資料庫更新,從而完成持久化對象和資料庫的同步。在同步之前的持久化對象成為髒對象。
當一個session()執行close()、clear()、或evict()之後,持久化對象就變為離線對象,這時對象的id雖然擁有資料庫的識別值,但已經不在Hibernate持久層的管理下,他和臨時對象基本上一樣的,只不過比臨時對象多了資料庫標識id。沒有任何變數引用時,jvm將其回收。
脫管狀態:Session關閉之後,與此Session關聯的持久化對象就變成為脫管對象,可以繼續對這個對象進行修改,如果脫管對象被重新關聯到某個新的Session上,會在此轉成持久對象。
脫管對象雖然擁有使用者的標識id,所以通過update()、saveOrUpdate()等方法,再次與持久層關聯。
在上面的那個例子中,對象c在剛誕生時是臨時狀態,對其進行save後是持久化狀態,Session關閉後是託管狀態。
並且,Session.save(c)只是將c存到一個緩衝中去,只有commit之後,才會將其修改資料庫。
hibernate入門