- 配置文件可配項:
參考文檔:hibernate-release-5.2.9.Final/documentation/userguide/html_single/Hibernate_User_Guide.html
1)Hibernate配置文件主要用於配置數據庫連接和Hibernate運行時所需要的各種屬性。
hibernate.cfg.xml常用的屬性:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <property name="hibernate.connection.username">root</property> 8 <property name="hibernate.connection.password">123456</property> 9 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 10 <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_01</property> 11 12 <!-- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 13 <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> --> 14 <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 15 16 <property name="hibernate.show_sql">true</property> 17 18 <property name="hibernate.format_sql">true</property> 19 20 <property name="hibernate.hbm2ddl.auto">update</property> 21 22 <property name="hibernate.current_session_context_class">thread</property> 23 24 <mapping resource="com/dx/hibernate5/test/News.hbm.xml" /> 25 <mapping class="com.dx.hibernate5.test.News" /> 26 </session-factory> 27 </hibernate-configuration>
2)每個Hibernate配置文件對應一個Hibernate Configuration類對象。
3)配置Hibernate配置文件可以有兩種格式:
hibernate.properties
hibernate.cfg.xml(推薦使用這種配置方式)
- 使用Hibernate的“C3P0”管理“數據庫連接池”
1)C3P0數據庫連接池屬性
// 數據庫連接池的最大連接數
hibernate.c3p0.max_size
// 數據庫連接池的最大連接數
hibernate.c3p0.min_size
// 數據庫連接池中連接對象在多長時間沒有使用過后,就應該被銷毀
hibernate.c3p0.timeout
// 緩存Statement對象的數量
hibernate.c3p0.max_statements
// 表示連接池檢測線程多長時間檢測一次線程池內的所有連接對象是否超時。
// 連接池本身不會把自己從連接池中移除,而是專門有一個線程按照一定的時間間隔來做這個事情。
// 這個線程通過比較連接對象最后一次被使用時間和當前時間的時間差來和timeout做對比,進而決定是否銷毀這個連接對象。
hibernate.c3p0.max_idle_test_period
// 當數據庫連接池中的連接耗盡時,同一時刻獲取多少個新的數據連接。
hibernate.c3p0.accquire.increment
示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--other settings--> 。。。 <property name="hibernate.c3p0.max_size">500</property> <property name="hibernate.c3p0.min_size">20</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.timeout">2000</property> <property name="hibernate.c3p0.idle_test_period">2000</property> <property name="hibernate.c3p0.acquire_increment">10</property> <mapping resource="com/dx/hibernate5/test/News.hbm.xml" /> <mapping class="com.dx.hibernate5.test.News" /> </session-factory> </hibernate-configuration>
2)導入c3p0需要的jar包
下載后解壓的開發包路徑中\hibernate-release-5.2.9.Final\lib\optional\c3p0下jar包導入進工程即可。

3)代碼測試:
package com.dx.hibernate5.test; import java.sql.Connection; import java.sql.SQLException; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.jdbc.Work; public class HelloWord { public static void main(String[] args) { // 1、創建一個SessionFactory對象 // 但是如果你使用Hibernate5的版本,就會報錯。那么Hibernate5應該怎樣構建SessionFactory呢,如下: // 和V4版本比,V5版本看不到configure對象了。直接使用創建者模式構建出了標准服務注冊對象 StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build(); // 這個對象metadata對象應該扮演了一個萬金油的角色,使用以上的注冊對象作為入參構建這個對象 Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder() .applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build(); // 最后由這個metadata使用構建出sessionFactory SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build(); // 2、創建一個Session對象 Session session = sessionFactory.getCurrentSession(); // 3、開啟事物 Transaction transaction = session.beginTransaction(); // 4、查看connection對象類型是否為c3p0 session.doWork(new Work() { @Override public void execute(Connection connection) throws SQLException { // TODO Auto-generated method stub System.out.println(connection); } }); // 5、提交事物 transaction.commit(); // 6、關閉Session對象 session.close(); // 7、關閉SessionFactory對象 sessionFactory.close(); System.out.println("Complete..."); } }
打印結果:
com.mchange.v2.c3p0.impl.NewProxyConnection@58a55449 [wrapping: com.mysql.jdbc.JDBC4Connection@7a676440]
