Hibernate配置文件主要用于配置數據庫連接和Hibernate運行時所需的各種屬性每個Hibernate配置文件對應一個Configuration對象Hibernate配置文件可以有兩種格式: hibernate.PRoperties hibernate.cfg.xml----常用
Hibernate.cfg.xml的常用屬性
JDBC連接屬性 connection.url:數據庫url connection.username:數據庫用戶名 connection.passWord:數據庫用戶密碼 connection.driver_class:數據庫JDBC驅動 dialect:配置數據庫方言,根據底層的數據庫不同產生不同的sql語句,Hibernate會針對數據庫的特性在訪問時進行優化
在Hibernate中使用C3P0 1.導入jar包:hibernate-release-4.3.7-Final/lib/optional/c3p0/*.jar 2.加入配置
C3P0數據庫連接池屬性 hibernate.c3p0.max_size:數據庫連接池的最大連接數 hibernate.c3p0.min_size:數據庫連接池的最小連接數 hibernate.c3p0.timeout:數據庫連接池中連接對象在多長時間沒有使用過后,就應該被銷毀 hibernate.c3p0.max_statements:緩存Statement對象的數量 Hibernate.c3p0.idle_test_period:表示連接池檢測線程多長時間檢測一次池內的所有連接對象是否超時,連接池本身不會把自己從連接池中移除,而是專門有一個線程按照一定的時間間隔來做這件事,這個線程通過比較連接對象最后一次被使用時間和當前時間的時間差來和timeout做對比,進而決定是否銷毀這個連接對象 Hibernate.c3p0.acquire_increment:當數據庫連接池中的連接耗盡時,同一時刻獲取到多少個數據庫連接
hibernate.jbbc.fetch_size:實質是調用Statement.setFetchSize()方法設定JDBC的Statement讀取數據的時候每次從數據庫中取出的記錄條數 例如一次查詢1萬條記錄,對于Oracle的jdbc驅動來說,是不會1次性把1萬條取出來的,而只會取出fetchSize條數,當結果集遍歷完了這些記錄以后再去數據庫去fetchSize條數據。因此大大節省了無謂的內存消耗。fetchSize設的越大,讀數據庫的次數越少,速度越快;fetchSize越小,讀數據庫的次數越多,速度越慢。Oracle數據庫的JDBC驅動默認的fetchSize=10,是一個保守的設定,根據測試,當fetchSize=50時,性能會提升1倍之多,當fetchSize=100,性能還能繼續提升20%,fetchSize繼續增大,性能提升的就不顯著了。并不是所有的數據庫都支持fetchSize特性,例如MySQL就不支持。
hibernate.jdbc.batch_size:設定對數據庫進行批量刪除,批量更新和批量插入的時候的批次大小,類似于設置緩沖區大小的意思。batchSize越大,批量操作時向數據庫發送sql的次數越小,速度就越快。 測試結果是當Batch Size=0的時候,使用Hibernate對Oracle數據庫刪除1萬條記錄需要25秒,Batch Size=50的時候,刪除僅需要5秒!Oracle數據庫batchSize=30的時候比較合適。
配置文件例子:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <!-- 配置連接數據庫的基本信息 --> 8 <property name="connection.username">scott</property> 9 <property name="connection.password">tiger</property>10 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>11 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>12 13 <!-- 配置hibernate基本信息 -->14 <!-- hibernate所使用的數據庫方言 -->15 <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>16 17 <!-- 執行操作時是否在控制臺打印sql -->18 <property name="show_sql">true</property>19 20 <!-- 是否對SQL進行格式化 --> 21 <property name="format_sql">true</property>22 23 <!-- 指定自動生成數據表的策略 -->24 <property name="hbm2ddl.auto">update</property>25 26 <!-- 設置Hibernate 的事務的隔離級別 -->27 <property name="connection.isolation">2</property>28 29 <!-- 刪除對象后,使其OID置為null -->30 <property name="hibernate.use_identifier_rollback">true</property>31 32 <!-- 配置C3P0數據源 -->33 <property name="hibernate.c3p0.max_size">10</property>34 <property name="hibernate.c3p0.min_size">5</property>35 <property name="c3p0.acquire_increment">2</property>36 37 <property name="c3p0.idle_test_period">2000</property>38 <property name="c3p0.timeout">2000</property>39 40 <property name="c3p0.max_statements">10</property>41 42 <!-- 設定JDBC的Statement 讀取數據的時候每次從數據庫中取出的數據條數 -->43 <property name="hibernate.jdbc.fetch_size">100</property>44 45 <!-- 設定對數據庫進行批量刪除、批量更新和批量插入的時候的批次的大小 -->46 <property name="hibernate.jdbc.batch_size">30</property>47 48 <!-- 指定關聯的.hbm.xml 文件 -->49 <mapping resource="com/yl/hibernate/entities/News.hbm.xml"/>50 51 52 </session-factory>53 </hibernate-configuration>
新聞熱點
疑難解答