《Hibernate學習筆記四》:Hibernate核心接口介紹
在前面的例子中,我們經常看到這樣的代碼:
public class TeacherTest {
private static SessionFactory sf=null;
@BeforeClass
public static void beforeClass(){
//讀取配置 文件 hibernate.cfg.xml
Configuration cf= new Configuration().configure();
sf=cf.buildSessionFactory();
}
@Test
public void testSaveTeacher() {
//獲取 Session
Session session=sf.openSession();
//開啓事務
session.beginTransaction();
Teacher t=new Teacher();
t.setId(2);
t.setName("zhangsan");
t.setTitle("professior");
//對持久化對象 進行 增刪改查 操作
session.save(t);
session.getTransaction().commit();
session.close();
}
@AfterClass
public static void afterClass(){
sf.close();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
代碼中有Configuration、SessionFactory、Session、Transaction等的應用。就是由他們構成了Hibernate的核心,即有了他們,我們纔不需要操作那些複雜的SQL數據庫語句。而是通過他們來幫助我們完成對象的持久化操作。
Hibernate核心如下圖所示
Hibernate 核心有2個配置文件和4大接口構成。
下面對這些接口和配置文件做一個簡單的介紹
1、Configuration:用於啓動和配置Hibernate。
說的更加詳細點,Configuration有以下幾點作用:1)進行配置信息的管理 2)用其buildSessionFactory()方法來產生SessionFactory 3)可以在configure方法中指定hibernate配置文件,默認情況下是讀取hibernate.cfg.xml,如果我們的配置文件不叫這個名字,則需要將這個配置文件傳入到這個configure(”XXX.cfg.xml”)。
2、SessionFactory:用於初始化Hibernate。維護着數據庫的連接池,當產生一個Session時,就分配一個數據庫的連接給它。
SessionFactory有如下兩種方法獲取Session對象。
Session session=sessionFactory.openSession();
這種方法每次都是打開一個新 Session。因此需要手動 session.close();
而還有一種方法:
Session session=sessionFactory.getCurrentSession();
此種方法並不是每次都是獲取一個新Session,而是從上下文找,如果存在Session,則就用舊的session,否則獲取一個新的Session。這種方法的用途:界定事務邊界。當事務提交時自動close。
使用getCurrentSession()從上下文來找,因此,在hibernate.cfg.xml中要設置這樣一行代碼:
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
current_session_context_class的取值還可以去jta、manager等,其中jta從分佈式來建立Session,即用於多個數據庫來處理事務。
3、Session:用於持久化對象的CURD(即增刪改查)操作。
主要的方法有:1)save() delete() update() load get等方法。想查看更多的方法,可以查看Hibernate的API.
關於Session,不得不介紹對象的3種狀態transient、persistent、detached。
這三種狀態的主要區別在於:1)有沒有ID,2)ID在數據庫中有沒有 3)在內存中有沒有(session 緩存)
1、transient:內存中有一個對象,沒有ID,緩存中也沒有ID
2、persistent:內存中有,緩存中也有,數據庫中也有(ID)
3、detached:內存中有,緩存中沒有,數據庫中有。
三種狀態更具Session調用不同的方法的狀態轉化圖如下(圖片來源於馬士兵Hibernate視頻):
4、Transaction:用於操作事務。
5、hibernate.cfg.xml:用於存放配置數據庫連接相關的信息,例如:使用的驅動、方言等
6、XXX.hbm.xml:是一個映射文件,用於實體類和數據庫表之間進行映射。
參考資料
1、馬士兵《Hibernate視頻講解》
from: http://blog.csdn.net/u010412719/article/details/51277669