歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Hibernate性能優化之SessionFactory重用

Hibernate性能優化之SessionFactory重用

日期:2017/3/1 9:28:05   编辑:Linux編程

Hibernate優化的方式有很多,如緩存、延遲加載以及與SQL合理映射,通過對SessionFactory使用的優化是最基礎的。

SessionFactory負責創建Session實例,Session相當於JDBC裡的Connection。

SessionFactory的創建

--------------------------------------------------------------------------------

SessionFactory是通過Configuration來構建的,Configuration會根據配置信息來構建SessionFactory。

SessionFactory中保存了對應當前數據庫配置的所有映射關系,還負責維護二級緩存和Statement池,因此SessionFactory的創建過程是非常耗時的。

Hibernate建議在代碼中設計SessionFactory的重用策略,並且SessionFactory默認是線程安全的,允許多個線程並發調用。

一般系統中只需創建一個SessionFactory實例,可以避免每次重新創建的時間,還可以更好的共享二級緩存。

SessionFactory的重用

--------------------------------------------------------------------------------

NetBeans提供默認的HibernateUtil.java來重用SessionFactory。

在我自己的項目中自己實現了一個重用類,可以作為參考:


public class HibernateSessionFactory {

private final Configuration configuration;
private final ServiceRegistry serviceRegistry;
private final SessionFactory sessionFactory;

private HibernateSessionFactory() {
configuration = new Configuration().configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}

public Session getSession() {
return sessionFactory.openSession();
}

private static class SingletonHolder {

private final static HibernateSessionFactory INSTANCE = new HibernateSessionFactory();
}

public static HibernateSessionFactory getInstance() {
return SingletonHolder.INSTANCE;
}

}

這個地方設計時要考慮多線程的環境,因此使用內部類來支持多線程。

性能測試

--------------------------------------------------------------------------------

對於重用前和重用後用ab命令進行了簡單的性能測試,性能提升一倍,效果還是非常明顯的。

重用前:

重用後:

Hibernate整體理解 http://www.linuxidc.com/Linux/2014-07/104405.htm

Hibernate的映射機制 http://www.linuxidc.com/Linux/2014-12/110265.htm

Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved