Java中使用Hibernate系列之載入並存儲物件學習(第三節)
阿新 • • 發佈:2022-04-29
經過第一、二節的學習,現在可以使用Hibernate來載入和儲存物件了,先編寫一個帶有main()方法的EventManager類:
網路配圖
程式碼如下:
package events; import org.hibernate.Session; import java.util.Date; import util.HibernateUtil; public class EventManager { public static void main(String[] args) { EventManager mgr = new EventManager(); if (args[0].equals("store")) { mgr.createAndStoreEvent("My Event", new Date()); } HibernateUtil.getSessionFactory().close(); } private void createAndStoreEvent(String title, Date theDate) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); } }
我們建立了個新的Event物件並把它傳遞給Hibernate,現在Hibernate負責與SQL進行溝通,並把INSERT命令傳給資料庫;在執行之前,讓我們看一下處理Session和Transaction的程式碼。
一個Session就是個單一的工作單元,我們假設HibernateSession和資料庫事務是一一對應的,這是為了讓我們的程式碼從底層的事務系統中脫離出來。
網路配圖
sessionFactory.getCurrentSession()是做什麼的呢?首先,只要你持有SessionFactory,可以在任何時候、任何地點呼叫這個方法,getCurrentSession()方法會返回“當前的”工作單元。
Session在第一次被使用的時候,即第一次呼叫getCurrentSession()的時候,其生命週期就開始,然後它被Hibernate繫結到當前執行緒中,當事務結束的時候,不管是提交還是回滾,Hibernate都會自動把Session從當前執行緒剝離,並且關閉它。
假若你再次呼叫getCurrentSession(),你會得到一個新的Session,並且開始一個新的工作單元,這種執行緒繫結(thread-bound)的程式設計模型(model)是使用Hibernate的最廣泛的方式,因為它支援對你的程式碼靈活分層(事務劃分可以和你的資料訪問程式碼分離開來,在本教程的後面部分就會這麼做)。
網路配圖
好了,這一節的學習先到這裡,後面章節中會繼續學習Hibernate。我們學習方式是每一節學習一個知識點(每天花10分鐘學習)。