《Hibernate學習筆記四》:Hibernate核心接口介紹

《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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章