[轉貼] Hibernate入門 – 基礎配置

來源:互聯網
上載者:User
 Hibernate設定檔可以有兩種格式,一種是hibernate.properties,另一種是hibernate.cfg.xml。後者稍微方便一些,當增加hbm對應檔的時候,可以直接在hibernate.cfg.xml裡面增加,不必像hibernate.properties必須在初始化代碼中加入。但不管怎麼說,兩種的配置項都是一樣的,下面詳細介紹:

在Hibernate的src目錄下有一個hibernate.properties模板,我們不必自己從頭寫,修改模板就可以了

代碼:
hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'

這個配置意思是當你在Hibernate裡面輸入true的時候,Hibernate會轉化為0插入資料庫,當你在Hibernate裡面輸入false的時候,Hibernate會轉化為1插入資料庫,後面的Y,N同理。對於某些資料庫,例如Oracle來說,沒有boolean資料類型,就是採用1代表 true,0代表false,因此使用這個配置在Hibernate裡面直接用true/false會非常直觀。

代碼:
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql:///test
hibernate.connection.username root
hibernate.connection.password

這是一個串連MySQL資料庫的例子,很直觀,不必解釋,不同的資料庫的串連參數模板中全部給出了。

代碼:
hibernate.connection.pool_size 1
hibernate.statement_cache.size 25

這是Hibernate內建的串連池的配置參數,在預設情況下將採用。意義很直觀,不多解釋。只是提醒一點,Hibernate這個串連池是非常原始非常簡單的串連池,如果你在項目中用Hibernate的話,建議你首選App Server的串連池,次選Hibernate帶的DBCP串連池。內建的串連池應該做為末選。

如果你採用DBCP串連池,除了要配置DBCP串連池以外,還需要取消掉下行的注釋:

代碼:
hibernate.connection.provider_class net.sf.hibernate.connection.DBCPConnectionProvider

其它的串連池同理。

如果採用App Server的串連池,假設App Server串連池的DataSource的JNDI名稱為"mypool"的話,配置應該如下:

代碼:
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.datasource mypool
hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider

其它參數就不必寫了,因為已經在App Server配置串連池的時候指定好了。

如果你不是在App Server環境中使用Hibernate,例如遠程用戶端程式,但是你又想用App Server的資料庫連接池,那麼你還需要配置JNDI的參數,例如Hibernate串連遠程Weblogic上的資料庫連接池:

代碼:
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.datasource mypool
hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider
hibernate.jndi.class weblogic.jndi.WLInitialContextFactory
hibernate.jndi.url t3://servername:7001/

最後,如果你需要在EJB或者JTA中使用Hibernate,需要取消下行的注釋:

代碼:
hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory

雜項配置:

代碼:
hibernate.show_sql false

是否將Hibernate發送給資料庫的sql顯示出來,這是一個非常非常有用處的功能。當你在調試Hibernate的時候,讓Hibernate列印sql語句,可以協助你迅速解決問題。

代碼:
#hibernate.connection.isolation 4

指定資料庫的隔離等級,往往不同的資料庫有自己定義的隔離等級,未必是Hibernate的設定所能更改的,所以也不必去管它了。

代碼:
hibernate.jdbc.fetch_size 50
hibernate.jdbc.batch_size 25

這兩個選項非常非常非常重要!!!將嚴重影響Hibernate的CRUD效能!
代碼:
C = create, R = read, U = update, D = delete

Fetch Size 是設定JDBC的Statement讀取資料的時候每次從資料庫中取出的記錄條數。例如一次查詢1萬條記錄,對於Oracle的JDBC驅動來說,是不會 1次性把1萬條取出來的,而只會取出Fetch Size條數,當紀錄集遍曆完了這些記錄以後,再去資料庫取Fetch Size條資料。因此大大節省了無謂的記憶體消耗。當然Fetch Size設的越大,讀資料庫的次數越少,速度越快;Fetch Size越小,讀資料庫的次數越多,速度越慢。這有點像平時我們寫程式寫硬碟檔案一樣,設立一個Buffer,每次寫入Buffer,等Buffer滿了以後,一次寫入硬碟,道理相同。

Oracle資料庫的JDBC驅動預設的Fetch Size=10,是一個非常保守的設定,根據我的測試,當Fetch Size=50的時候,效能會提升1倍之多,當Fetch Size=100,效能還能繼續提升20%,Fetch Size繼續增大,效能提升的就不顯著了。因此我建議使用Oracle的一定要將Fetch Size設到50。

不過並不是所有的資料庫都支援Fetch Size特性,例如MySQL就不支援。MySQL就像我上面說的那種最壞的情況,他總是一下就把1萬條記錄完全取出來,記憶體消耗會非常非常驚人!這個情況就沒有什麼好辦法了

Batch Size是設定對資料庫進行大量刪除,批次更新和批量插入的時候的批次大小,有點相當於設定Buffer緩衝區大小的意思。Batch Size越大,大量操作的向資料庫發送sql的次數越少,速度就越快。我做的一個測試結果是當Batch Size=0的時候,使用Hibernate對Oracle資料庫刪除1萬條記錄需要25秒,Batch Size = 50的時候,刪除僅僅需要5秒!!!可見有多麼大的效能提升!很多人做Hibernate和JDBC的插入效能測試會奇怪的發現Hibernate速度至少是JDBC的兩倍,就是因為 Hibernate使用了Batch Insert,而他們寫的JDBC沒有使用Batch的緣故。以我的經驗來看,Oracle資料庫 Batch Size = 30 的時候比較合適,50也不錯,效能會繼續提升,50以上,效能提升的非常微弱,反而消耗記憶體更加多,就沒有必要了。

代碼:
#hibernate.jdbc.use_scrollable_resultset true

設定是否可以使用JDBC2.0規範的可滾動結果集,這對Hibernate的分頁顯示有一定的作用,預設就好了。

代碼:
#hibernate.cglib.use_reflection_optimizer false

預設開啟,啟用cglib反射最佳化。cglib是用來在Hibernate中動態產生PO位元組碼的,開啟最佳化可以加快位元組碼構造的速度。

不過,當你在偵錯工具過程中,特別是和proxy,lazy loading相關的應用中,代碼出錯,但是出錯提示資訊有語焉不詳,那麼你可以把cglib最佳化關掉,這樣Hibernate會輸出比較詳細的調試資訊,協助你debug。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.