<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    Hibernate基礎配置

    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。

    posted on 2006-10-17 14:09 junky 閱讀(349) 評論(0)  編輯  收藏 所屬分類: hibernate

    主站蜘蛛池模板: 久久久久国产精品免费免费搜索| 国产男女猛烈无遮挡免费视频网站 | 久久久久久亚洲av无码蜜芽| 亚洲A∨精品一区二区三区| 99久久免费国产精精品| 亚洲卡一卡2卡三卡4麻豆| 日韩在线天堂免费观看| 亚洲阿v天堂在线2017免费 | 精品国产污污免费网站入口在线| 亚洲午夜精品久久久久久人妖| 久久WWW免费人成人片| 一级毛片正片免费视频手机看| 亚洲国产精品久久久久| 国产精品另类激情久久久免费| 免费看成人AA片无码视频吃奶| 中文文字幕文字幕亚洲色| 在线观看亚洲精品福利片| 亚洲一区免费在线观看| 美女视频黄视大全视频免费的| 精品日韩亚洲AV无码一区二区三区 | 青青草国产免费久久久91| 免费久久人人爽人人爽av| 亚洲国产精品99久久久久久| 亚洲国产成人久久精品动漫| 哒哒哒免费视频观看在线www| 免费无码又爽又刺激高潮视频| 香蕉97碰碰视频免费| 色天使亚洲综合在线观看| 亚洲va久久久噜噜噜久久天堂| 国产成人免费a在线资源| aⅴ在线免费观看| 国精产品一区一区三区免费视频| 亚洲av无码一区二区三区天堂| 亚洲视屏在线观看| 久久乐国产精品亚洲综合| 毛片a级毛片免费播放100| 久久久久国产精品免费网站| 日韩a毛片免费观看| 亚洲αⅴ无码乱码在线观看性色| 91亚洲国产成人精品下载| 亚洲精品蜜桃久久久久久|