首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Hibernate核心筆記(二):上下文會話、配置體系、SessionFactory與JDBC連接管理

     編輯:J2EE

本文為Hibernate官方文檔筆記第二部分,深入剖析Contextual Sessions、Configuration、SessionFactory獲取與JDBC連接封裝四大核心主題。

五、 Contextual Sessions:上下文會話模式演進

眾多應用需要將Hibernate Session綁定至特定上下文(請求、會話、事務)。上下文範圍定義隨架構而異:

  • Hibernate 3.0之前:自行實現ThreadLocal模式(如HibernateUtil)或依賴Spring/Pico等第三方框架代理攔截。
  • Hibernate 3.0.1:引入SessionFactory.getCurrentSession(),初期綁定JTA事務上下文。
  • Hibernate 3.1+:可插拔上下文策略,引入org.hibernate.context.CurrentSessionContext介面與hibernate.current_session_context_class配置參數。

三大內建實現

  1. JTASessionContext:JTA事務邊界管理Session生命週期(Java EE標準模式)
  2. ThreadLocalSessionContext:當前執行緒綁定Session(適用非JTA環境)
  3. ManagedSessionContext:手動綁定/解綁至執行緒,不自動open/flush/close,完全手動控制

前兩者實現經典Session-per-Request模式(一個Session對應一個資料庫事務)。程式化事務建議使用Hibernate Transaction API;JTA環境使用JTA介面;CMT容器中透過聲明式事務無需代碼干預。

配置範例:hibernate.current_session_context_class=jta|thread|managed或完整類名。未配置但設有TransactionManagerLookup時,為向後兼容預設使用JTASessionContext。

六、 Configuration:配置體系詳解

org.hibernate.cfg.Configuration代表應用的完整對象/關係映射元數據,用於構建不可變的SessionFactory。配置來源四選一:

  1. 程式化:cfg.addResource("mapping.hbm.xml") / cfg.addClass(Entity.class)
  2. java.util.Properties傳遞setProperties()
  3. 類路徑根目錄下hibernate.properties
  4. 系統屬性java -Dproperty=value
  5. hibernate.cfg.xml中<property>標籤

關鍵特性:Configuration為啟動時臨時對象,SessionFactory建立後即可丟棄,不可在運行期修改映射元數據。

七、 獲取SessionFactory:線程安全的重量級工廠

SessionFactory sessionFactory = cfg.buildSessionFactory();
  • 應用級單例,所有線程共享
  • 支援多SessionFactory實例(多数據庫場景)
  • 建立過程包含映射解析、方言驗證、連接池初始化,屬重操作

八、 JDBC Connections:Session底層連接管理

基本用法

Session session = sessionFactory.openSession(); // 需要時從池獲取連接

連接配置兩大模式

1. DriverManager直連模式(開發/測試用)

hibernate.connection.driver_class
hibernate.connection.url
hibernate.connection.username
hibernate.connection.password
hibernate.connection.pool_size  -- 內建簡易池,非生產級

警告:Hibernate內建連接池算法未優化,生產環境必須替換為C3P0、Proxool、HikariCP等專業連接池。啟用C3P0僅需配置hibernate.c3p0.*屬性即可自動切換C3P0ConnectionProvider。

2. JNDI DataSource模式(生產/應用服務器標準)

hibernate.connection.datasource      -- JNDI名稱
hibernate.jndi.url                   -- 可選,JNDI提供者URL
hibernate.jndi.class                 -- 可選,InitialContext工廠類
hibernate.connection.username        -- 可選
hibernate.connection.password        -- 可選

自定義連接策略

實現org.hibernate.connection.ConnectionProvider介面,並配置hibernate.connection.provider_class指向實現類,完全掌控連接獲取/釋放邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved