在實際的Hibernate應用中,使用到的Hibernate核心接口與類並不多。要更深入地使用Hibernate,還需要學習Hibernate的延遲加載和緩存處理等高級的內容。下面附上Hibernate核心類和接口的層次圖:
- 最底層的配置文件,在上一講有詳細講解配置。
Configuration 類
org.hibernate.cfg.Configuration 實例代表了一個應用程序中 Java 類型到SQL數據庫映射的完整集合。作用如下:
- 負責管理hibernate的配置信息。
- 讀取hibernate.cfg.xml中的配置信息。
- 加載hibernate.cfg.xml配置文件中配置的驅動,url,用戶名,密碼,連接池。
- 管理對象映射文件*.hbm.xml(
例:<mapping resource=”com/cmj/domain/Employee.hbm.xml”>
)
SessionFactory
當所有映射定義被 org.hibernate.cfg.Configuration 解析後,應用程序必須獲得一個用於構造 org.hibernate.Session 實例的工廠。這個工廠將被應用程序的所有線程共享:
- 可以緩存sql語句和數據(稱爲session級緩存)
- 是一個重量級的類,因此我們需要保證一個數據庫,有一個SessionFactroy
- 通過SessionFactory藉口可以獲得session實例(getCurrentSession(),openSession())
注:openSession()區別getCurrentSession()
1.openSession() 是獲取一個新的session.
2. getCurrentSession () 獲取和當前線程綁定的session,換言之,在同一個線程中,我們獲取的session是同一session,這樣可以利於事務控制
如果希望使用 getCurrentSession 需要配置 hibernate.cfg.xml中配置.
配置:thread將session與線程綁定。
3. 如何選擇
原則:
①如果需要在同一線程中,保證使用同一個Session則,使用getCurrentSession()
②如果在一個線程中,需要使用不同的Session,則使用opentSession()
4. 通過 getCurrentSession() 獲取的session在事務提交後,會自動關閉,通過openSession()獲取的session則必須手動關閉
5. 如果是通過getCurrentSession() 獲取 sesssion ,進行查詢需要事務提交.
session(會話)
- Session一個實例代表與數據庫的一次操作(當然一次操作可以是crud組合)
- Session實例通過SessionFactory獲取,用完需要關閉。
- Session是線程不同步的(不安全),因此要保證在同一線程中使用,可以用getCurrentSession()。
- Session可以看做是持久化管理器,它是與持久化操作相關的接口
幾個重要的方法
- 保存一個對象(記錄)—-save方法
- 刪除一個對象(記錄)—-delete方法
- 查詢一個對象(記錄)—-get/load方法
- 修改一個對象(記錄)—-update方法