Hibernate優(yōu)化的方式有很多,如緩存、延遲加載以及與SQL合理映射,通過對SessionFactory使用的優(yōu)化是最基礎(chǔ)的。
SessionFactory負責創(chuàng)建Session實例,Session相當于JDBC里的Connection。
SessionFactory的創(chuàng)建
SessionFactory是通過Configuration來構(gòu)建的,Configuration會根據(jù)配置信息來構(gòu)建SessionFactory。
SessionFactory中保存了對應當前數(shù)據(jù)庫配置的所有映射關(guān)系,還負責維護二級緩存和Statement池,因此SessionFactory的創(chuàng)建過程是非常耗時的。
Hibernate建議在代碼中設計SessionFactory的重用策略,并且SessionFactory默認是線程安全的,允許多個線程并發(fā)調(diào)用。
一般系統(tǒng)中只需創(chuàng)建一個SessionFactory實例,可以避免每次重新創(chuàng)建的時間,還可以更好的共享二級緩存。
SessionFactory的重用
NetBeans提供默認的HibernateUtil.java來重用SessionFactory。
在我自己的項目中自己實現(xiàn)了一個重用類,可以作為參考:
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; }}這個地方設計時要考慮多線程的環(huán)境,因此使用內(nèi)部類來支持多線程。
性能測試
對于重用前和重用后用ab命令進行了簡單的性能測試,性能提升一倍,效果還是非常明顯的。
重用前:

重用后:

記錄,為更好的自己!
新聞熱點
疑難解答