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 的下載地址:請點這裡