hibernate建立SessionFactory的幾種方式,及原因分析?
阿新 • • 發佈:2018-12-17
全網搜尋不到原因分析,如下是我自己總結的,參考的是原始碼介紹!
1. hibernate3.X
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
2. hibernate4.x
SessionFactory sessionFactory = null; Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry);
3. hibernate5.X
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
try {
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
StandardServiceRegistryBuilder.destroy( registry );
}
4.上面是:hibernate建立SessionFactory的幾種方式,原因分析如下!
4.1 hibernate3.X中Configure類的說明
- 它表示一個配置例項,當建立會話工廠時,它允許應用程式指定將被使用的屬性與對映的文件
- 這配置類只是當作初始化時的一個物件(別無他用)
4.2 hibernate4.X中Configure類的說明
- 注意:在4.0版本後,這個類將會被用"服務註冊構建器(ServiceRegistryBuilder)及元資料資源類(MetadataSources)"所代替,基於這點,這個類將會被廢棄以及在5.0版本計劃移除
- 詳細細節,現在被官方抹掉了,以前是可以詳細細節頁面的.大概講解的是:“這種方法有一些重要的缺點導致它的棄用和新方法的開發”,我想我們看新方法的優點就應該能知道廢棄它的原因吧!
4.3 hibernate5.X中Configure類的說明
- 代表啟動hibernate的一種方式.實際上從歷史上看這是引導hibernate的方式(言外之意:以前是這樣乾的),現在可以選擇其它方式)
- 我們將會嘗試,從他們被新增的資源中遞增構建這對映,這是與這個類傳統行為的重要區別
- 這種改變在行為上的分支是:使用者可以在這新增配置與對映的資源,但是他們再也不能在這裡查詢對映遷移的狀態(持久化類,集合,其它)
- 與4.X的變化是使用StandardServiceRegistry ,而不是使用ServiceRegistry ,編碼上也進行相應調整,相對4.X簡化了