Hibernate的配置文件中有一部份是在設定資料庫連結,例如使用XML檔案進行配置:
- hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 顯示實際操作資料庫時的SQL -->
<property name="show_sql">true</property>
<!-- 將顯示的SQL排版,方便觀看 -->
<property name="format_sql">true</property>
<!-- SQL方言,這邊設定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驅動程式 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!-- 資料庫使用者 -->
<property name="connection.username">caterpillar</property>
<!-- 資料庫密碼 -->
<property name="connection.password">123456</property>
<!-- Hibernate 預設的Connection pool -->
<property name="connection.pool_size">2</property>
<!-- 物件與資料庫表格映射文件 -->
<mapping resource="onlyfun/caterpillar/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
其中設定的connection.pool_size是Hibernate預設的連接池設定,通常只用於開發階段測試之用。如果使用properties 檔案的話則如下:
- hibernate.properties
hibernate.show_sql = true
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/demo
hibernate.connection.username = caterpillar
hibernate.connection.password = 123456
hibernate.connection.pool_size = 2
Hibernate在資料庫連接池的使用上是可選的,您可以使用C3P0連接池,例如XML的配置方式如下:
- hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 顯示實際操作資料庫時的SQL -->
<property name="show_sql">true</property>
<!-- SQL方言,這邊設定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC驅動程式 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!-- 資料庫使用者 -->
<property name="connection.username">caterpillar</property>
<!-- 資料庫密碼 -->
<property name="connection.password">123456</property>
<!-- C3P0 連接池設定 -->
<!-- 最小的Connection數目 -->
<property name="c3p0.min_size">5</property>
<!-- 最大的Connection數目 -->
<property name="c3p0.max_size">20</property>
<!-- 允許的idle時間 -->
<property name="c3p0.timeout">300</property>
<!-- 最大的Statement數目 -->
<property name="c3p0.max_statements">50</property>
<!-- idle的測試週期 -->
<property name="c3p0.idle_test_period">3000</property>
<!-- 物件與資料庫表格映射文件 -->
<mapping resource="onlyfun/caterpillar/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
記得您的Classpath中必須包括c3p0-*.jar,屬性文件hibernate.properties的配置範例如下:
- hibernate.properties
hibernate.show_sql = true
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/demo
hibernate.connection.username = caterpillar
hibernate.connection.password = 123456
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=300
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=3000
您也可以使用Proxool或DBCP連接池,只要在配置文件中配置hibernate.proxool.*或hibernate.dbcp.*等相關選 項,這可以在hibernate的etc目錄中找hibernate.properties中的配置例子來參考,當然要記得在Classpath中加入相 關的jar檔案。
如果您使用Tomcat的話,您也可以透過它提供的DBCP連接池來取得連接,您可以先參考 使 用 DBCP 的文章來設定Tomcat的DBCP連接池。
設定好容器提供的DBCP連接池之後,您只要在配置文件中加入connection.datasource屬性,例如在 hibernate.cfg.xml中加入:
<property
name="connection.datasource">java:comp/env/jdbc/dbname</property>
如果是在hibernate.properties中的話,則加入:
hibernate.connection.datasource
= java:comp/env/jdbc/dbname
如果想要提供自己的連接池實作,則可以實作org.hibernate.connection.ConnectionProvider介面,並在hibernate.connection.provider_class屬性設定您的實作類別名稱。