本博客的目的:①總結自己的學習過程,相當於學習筆記 ②將自己的經驗分享給大家,相互學習,互相交流,不可商用
內容難免出現問題,歡迎指正,交流,探討,可以留言,也可以通過以下方式聯系。
本人互聯網技術愛好者,互聯網技術發燒友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.hibernate 配置文件(部分參考http://www.cnblogs.com/jasonHome/p/5929471.html)
1)Hibernate 配置文件主要用於配置數據庫連接和 Hibernate 運行時所需的各種屬性
2)每個 Hibernate 配置文件對應一個 Configuration 對象
3)Hibernate配置文件可以有兩種格式:
hibernate.properties
hibernate.cfg.xml
2.hibernate.cfg.xml的常用屬性
① JDBC 連接屬性
>connection.url:數據庫URL
>connection.username:數據庫用戶名
>connection.password:數據庫用戶密碼
>connection.driver_class:數據庫JDBC驅動
>dialect:配置數據庫的方言,根據底層的數據庫不同產生不同的 sql 語句,Hibernate 會針對數據庫的特性在訪問時進行優化
②C3P0 數據庫連接池屬性
>hibernate.c3p0.max_size : 數據庫連接池的最大連接數 . 當前應用有高並發,並發量大
>hibernate.c3p0.min_size : 數據庫連接池的最小連接數 . 當前應用沒有任何請求,任何並發,在連接池中最小的連接數
>hibernate.c3p0.acquire_increment : 當數據庫連接池中的連接耗盡時, 同一時刻獲取多少個數據庫連接. 當連接池中的連接沒有的時候,每次向服務器中要多少個數據庫連接
>hibernate.c3p0.timeout : 數據庫連接池中連接對象在多長時間沒有使用過后,就應該被銷毀.
>hibernate.c3p0.idle_test_period : 表示連接池檢測線程多長時間檢測一次池內的所有鏈接對象是否超時. 連接池本身不會把自己從連接池中移除,而是專門有一個線程按照一定的時間間隔來做這件事,這個線程通過比較連接對象最后一次被使用時間和當前時間的時間差來和 timeout 做對比,進而決定是否銷毀這個連接對象.
>hibernate.c3p0.max_statements : 緩存 Statement 對象的數量.
③其他
>show_sql: 是否將運行期生成的SQL輸出到日志以供調試。取值 true | false
>format_sql: 是否將 SQL 轉化為格式良好的 SQL . 取值 true | false
>hbm2ddl.auto: 在啟動和停止時自動地創建,更新或刪除數據庫模式。取值 create | update | create-drop | validate
>hibernate.jdbc.fetch_size:
1 hibernate.jdbc.fetch_size:實質是調用 Statement.setFetchSize() 方法設定 JDBC 的 Statement 讀取數據的時候每次從數據庫中取出的記錄條數。
2 例如一次查詢1萬條記錄,對於Oracle的JDBC驅動來說,是不會 1 次性把1萬條取出來的,而只會取出 fetchSize 條數,當結果集遍歷完了這些記錄以后,再去數據庫取 fetchSize 條數據。因此大大節省了無謂的內存消耗。
Fetch Size設的越大,讀數據庫的次數越少,速度越快;Fetch Size越小,讀數據庫的次數越多,速度越慢。
Oracle數據庫的JDBC驅動默認的Fetch Size = 10,是一個保守的設定,根據測試,當Fetch Size=50時,性能會提升1倍之多,當 fetchSize=100,性能還能繼續提升20%,Fetch Size繼續增大,性能提升的就不顯著了。
並不是所有的數據庫都支持Fetch Size特性,例如MySQL就不支持
>hibernate.jdbc.batch_size:
1 hibernate.jdbc.batch_size:設定對數據庫進行批量刪除,批量更新和批量插入的時候的批次大小,類似於設置緩沖區大小的意思。batchSize 越大,批量操作時向數據庫發送sql的次數越少,速度就越快。 2 測試結果是當Batch Size=0的時候,使用Hibernate對Oracle數據庫刪除1萬條記錄需要25秒,Batch Size = 50的時候,刪除僅僅需要5秒!Oracle數據庫 batchSize=30 的時候比較合適。
1 <!-- 對於mysql 無效,對於oracle 有效 --> 2 <!-- 設定JDBC 的Statement 讀取數據的時候每次從數據庫中取出的記錄的條數 --> 3 <property name="hibernate.jdbc.fetch_size">100</property> 4 5 <!-- 設置數據庫進行批量刪除,批量更新和批量插入的時候的大小 --> 6 <property name="hibernate.jdbc.batch_size">30</property>
3.hibernate中配置 c3p0數據源
1)導入jar 包:
\SSH-framwork\hibernate-release-4.2.4.Final\hibernate-release-4.2.4.Final\lib\optional\c3p0\*
2)加入配置:
1 <!-- 配置c3p0 -->
2 <property name="hibernate.c3p0.max_size">10</property>
3 <property name="hibernate.c3p0.min_size">5</property>
4 <property name="c3p0.acquire_increment">2</property>
5 <property name="c3p0.idle_test_period">2000</property>
6 <property name="c3p0.timeout">2000</property>
7 <property name="c3p0.max_statements">10</property>