Hibernate JDBC連接詳解
本文向大家介紹Hibernate JDBC連接,可能好多人還不了解Hibernate JDBC連接,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
Hibernate JDBC連接
通常你希望SessionFactory來為你創建和緩存(pool)JDBC連接. 如果你采用這種方式, 只需要如下例所示那樣,打開一個Session:
- Session session = sessions.openSession(); // open a new Session
一旦你需要進行數據訪問時, 就會從連接池(connection pool)獲得一個JDBC連接.
為了使這種方式工作起來, 我們需要向Hibernate傳遞一些JDBC連接的屬性. 所有Hibernate屬性的名字和語義都在org.hibernate.cfg.Environment中定義. 我們現在將描述JDBC連接配置中最重要的設置.
如果你設置如下屬性,Hibernate將使用java.sql.DriverManager來獲得(和緩存)JDBC連接 :
表 1. Hibernate JDBC屬性
屬性名 |
用途 |
hibernate.connection.driver_class |
jdbc驅動類 |
hibernate.connection.url |
jdbc URL |
hibernate.connection.username |
數據庫用戶 |
hibernate.connection.password |
數據庫用戶密碼 |
hibernate.connection.pool_size |
連接池容量上限數目 |
但Hibernate自帶的連接池算法相當不成熟. 它只是為了讓你快些上手,并不適合用于產品系統或性能測試中。 出于最佳性能和穩定性考慮你應該使用第三方的連接池。只需要用特定連接池的設置替換 hibernate.connection.pool_size即可。這將關閉Hibernate自帶的連接池. 例如, 你可能會想用C3P0.
C3P0是一個隨Hibernate一同分發的開源的JDBC連接池, 它位于lib目錄下。 如果你設置了hibernate.c3p0.*相關的屬性, Hibernate將使用 C3P0ConnectionProvider來緩存JDBC連接. 如果你更原意使用Proxool, 請參考發 行包中的hibernate.properties并到Hibernate網站獲取更多的信息.
這是一個使用C3P0的hibernate.properties樣例文件:
- hibernate.connection.driver_class = org.postgresql.Driver
- hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
- hibernate.connection.username = myuser
- hibernate.connection.password = secret
- hibernate.c3p0.min_size=5
- hibernate.c3p0.max_size=20
- hibernate.c3p0.timeout=1800
- hibernate.c3p0.max_statements=50
- hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
為了能在應用程序服務器(application server)中使用Hibernate, 應當總是將Hibernate 配置成從注冊在JNDI中的Datasource處獲得連接,你至少需要設置下列屬性中的一個:
表 2. Hibernate數據源屬性
屬性名 |
用途 |
hibernate.connection.datasource |
數據源JNDI名字 |
hibernate.jndi.url |
JNDI提供者的URL (可選) |
hibernate.jndi.class |
JNDI InitialContextFactory類 (可選) |
hibernate.connection.username |
數據庫用戶 (可選) |
hibernate.connection.password |
數據庫用戶密碼 (可選) |
這是一個使用應用程序服務器提供的JNDI數據源的hibernate.properties樣例文件:
- hibernate.connection.datasource = java:/comp/env/jdbc/test
- hibernate.transaction.factory_class = \
- org.hibernate.transaction.JTATransactionFactory
- hibernate.transaction.manager_lookup_class = \
- org.hibernate.transaction.JBossTransactionManagerLookup
- hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
從JNDI數據源獲得的JDBC連接將自動參與到應用程序服務器中容器管理的事務(container-managed transactions)中去.
任何連接(connection)屬性的屬性名都要以"hibernate.connnection"開頭. 例如, 你可能會使用hibernate.connection.charSet來指定字符集charSet.
通過實現org.hibernate.connection.ConnectionProvider接口,你可以定義屬于 你自己的獲得Hibernate JDBC連接的插件策略。通過設置hibernate.connection.provider_class, 你可以選擇一個自定義的實現.
【編輯推薦】