hibernate 架構
hibernate 架構是一個分層架構,作為數據訪問層,無需知道底層 api 。
hibernate 利用數據庫以及配置數據來為應用程序提供持久性存儲服務。
下面是一個高層的 hibernate 應用程序架構視圖。
下面是一個詳細的 hibernate 應用程序體系結構視圖以及一些重要的類。
hibernate 使用不同的現存 java api,比如 jdbc,java 事務 api(jta),以及 java 命名和目錄界面(jndi)。
jdbc 提供了一個基本的抽象級別的通用關系數據庫的功能,hibernate 支持幾乎所有帶有 jdbc 驅動的數據庫。
jndi 和 jta 允許 hibernate 與 j2ee 應用程序服務器相集成。
下面的部分簡要地描述了在 hibernate 應用程序架構所涉及的每一個類對象。
配置對象
配置對象是你在任何 hibernate 應用程序中創造的第一個 hibernate 對象,并且經常只在應用程序初始化期間創造。它代表了 hibernate 所需一個配置或屬性文件。配置對象提供了兩種基礎組件。
- 數據庫連接: 由 hibernate 支持的一個或多個配置文件處理。這些文件是
hibernate.properties
和hibernate.cfg.xml
。 - 類映射設置: 這個組件創造了 java 類和數據庫表格之間的聯系。
sessionfactory 對象
配置對象被用于創造一個 sessionfactory 對象,使用提供的配置文件為應用程序依次配置 hibernate,并允許實例化一個會話對象。sessionfactory 是一個線程安全對象并由應用程序所有的線程所使用。
sessionfactory 是一個重量級對象所以通常它都是在應用程序啟動時創造然后留存為以后使用。每個數據庫需要一個 sessionfactory 對象使用一個單獨的配置文件。所以如果你使用多種數據庫那么你要創造多種 sessionfactory 對象。
session 對象
一個會話被用于與數據庫的物理連接。session 對象是輕量級的,并被設計為每次實例化都需要與數據庫的交互。持久對象通過 session 對象保存和檢索。
session 對象不應該長時間保持開啟狀態因為它們通常情況下并非線程安全,并且它們應該按照所需創造和銷毀。
transaction 對象
一個事務代表了與數據庫工作的一個單元并且大部分 rdbms 支持事務功能。在 hibernate 中事務由底層事務管理器和事務(來自 jdbc 或者 jta)處理。
這是一個選擇性對象,hibernate 應用程序可能不選擇使用這個接口,而是在自己應用程序代碼中管理事務。
query 對象
query 對象使用 sql 或者 hibernate 查詢語言(hql)字符串在數據庫中來檢索數據并創造對象。一個查詢的實例被用于連結查詢參數,限制由查詢返回的結果數量,并最終執行查詢。
criteria 對象
criteria 對象被用于創造和執行面向規則查詢的對象來檢索對象。