Hibernate學習心得--性能優化
作者:Flyingis
在使用Hibernate進行查詢的時候大家都會用到Hibernate緩存,其中Session緩存即一塊內存空間,存放了相互關聯的Java對象,這些位于Session緩存中的對象就是持久化對象,Session根據持久化對象的狀態變化來同步更新數據庫。這個Session緩存是Hibernate的一級緩存。此外,SessionFactory有一個內置緩存和一個外置緩存,即Hibernate的第二級緩存。而Hibernate正是由于這些緩存的存在,才使得其數據庫操作效率提高,就是說,在提供了方便易操作的操作數據庫數據的方式的同時保證了工作效率,但是不能因此而免去后顧之憂,需要在設計業務邏輯層的時候考慮使用最優的架構,節省有效的系統資源。在查詢方面,Hibernate主要從以下幾個方面來優化查詢性能:
1.降低訪問數據庫的頻率,減少select語句的數目。實現手段包括:
使用迫切左外連接或迫切內連接檢索策略。
對延遲檢索或立即檢索策略設置批量檢索數目。
使用查詢緩存。
2.避免多余加載程序不需要訪問的數據。實現手段包括:
使用延遲檢索策略。
使用集合過濾。
3.避免報表查詢數據占用緩存。實現手段為利用投影查詢功能,查詢出實體的部分屬性。
4.減少select語句中的字段,從而降低訪問數據庫的數據量。實現手段為利用Query的iterate()方法。
在插入和更新數據時,要控制insert和update語句,合理設置映射屬性來保證插入更新的性能,例如,當表中包含許多字段時,建議把dynamic-update屬性和dynamic-update屬性都設為true,這樣在insert和update語句中就只包含需要插入或更新的字段,這可以節省數據庫執行SQL語句的時間,從而提高應用的運行性能。
在使用Hibernate進行查詢的時候大家都會用到Hibernate緩存,其中Session緩存即一塊內存空間,存放了相互關聯的Java對象,這些位于Session緩存中的對象就是持久化對象,Session根據持久化對象的狀態變化來同步更新數據庫。這個Session緩存是Hibernate的一級緩存。此外,SessionFactory有一個內置緩存和一個外置緩存,即Hibernate的第二級緩存。而Hibernate正是由于這些緩存的存在,才使得其數據庫操作效率提高,就是說,在提供了方便易操作的操作數據庫數據的方式的同時保證了工作效率,但是不能因此而免去后顧之憂,需要在設計業務邏輯層的時候考慮使用最優的架構,節省有效的系統資源。在查詢方面,Hibernate主要從以下幾個方面來優化查詢性能:
1.降低訪問數據庫的頻率,減少select語句的數目。實現手段包括:
使用迫切左外連接或迫切內連接檢索策略。
對延遲檢索或立即檢索策略設置批量檢索數目。
使用查詢緩存。
2.避免多余加載程序不需要訪問的數據。實現手段包括:
使用延遲檢索策略。
使用集合過濾。
3.避免報表查詢數據占用緩存。實現手段為利用投影查詢功能,查詢出實體的部分屬性。
4.減少select語句中的字段,從而降低訪問數據庫的數據量。實現手段為利用Query的iterate()方法。
在插入和更新數據時,要控制insert和update語句,合理設置映射屬性來保證插入更新的性能,例如,當表中包含許多字段時,建議把dynamic-update屬性和dynamic-update屬性都設為true,這樣在insert和update語句中就只包含需要插入或更新的字段,這可以節省數據庫執行SQL語句的時間,從而提高應用的運行性能。
還有什么其它的提升性能的方式希望和大家一起討論。
posted on 2005-11-15 10:22 Flyingis 閱讀(6173) 評論(3) 編輯 收藏 所屬分類: Hibernate