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