鍍金池/ 教程/ Java/ Hibernate 核心接口
Spring 事務管理
Struts2 上傳文件
Hibernate 對象的三種狀態(tài)
Struts2 攔截器
Hibernate與Spring 配合生成表結構
Struts2 內(nèi)部是如何工作的
Spring 容器IOC解析及簡單實現(xiàn)
Hibernate動態(tài)模型+JRebel實現(xiàn)動態(tài)創(chuàng)建表
Hibernate 核心接口
Hibernate——Session之save()方法
提高用戶體驗之404處理
Struts2 國際化自動檢測瀏覽器語言版
Struts2 國際化手動切換版
Spring jar包詳解
Spring 容器AOP的實現(xiàn)原理——動態(tài)代理
Struts實現(xiàn)簡單登錄(附源碼)
Hibernate之SchemaExport+配置文件生成表結構
基于注解的SSH將配置精簡到極致
簡單模擬Hibernate實現(xiàn)原理

Hibernate 核心接口

在使用Hibernate的時候,我們通常都會用的Configuration、SessionFactory、Session、Transaction、Query和Criteria等接口。通過這些接口可以,不僅可以存儲與取出持久化對象,還可以對事務進行管理。下面對著幾個接口一一介紹:

幾個接口之間的層次關系如下圖:

http://wiki.jikexueyuan.com/project/ssh-noob-learning/images/10.1.jpeg" alt="" />

Configuration:

Configuration是Hibernate的入口,負責將配置文件信息加載到內(nèi)存,并創(chuàng)建一個SessionFactory對象,把讀入的配置信息加載到SessionFactory對象的內(nèi)存里。

特點:

Configuration對象的作用是除了有讀取配置文件的功能,還能創(chuàng)建SessionFactory對象。Configuration對象只存在于系統(tǒng)的初始化階段,然后所有的持久化操作都能通過這個SessionFactory實例來進行。 Configuration對象只有在Hibernate 進行初始化的時候才需要創(chuàng)建,當使用Configuration對象的實例創(chuàng)建了SessionFactory對象的實例后,其配置信息已經(jīng)綁定在他返回的SessionFactory對象實例中。因此,一般情況下,得到SessionFactory對象后,Configuration對象的使命就結束了。

用法:

屬性文件(hibernate.properties):Configuration cfg = new Configuration(); Xml文件(hibernate.cfg.xml):Configuration cfg = new Configuration().configure();

SessionFactory:

SessionFactory負責創(chuàng)建Session實例,每個SessionFactory實例對應一個數(shù)據(jù)庫。SessionFactory是重量級的,占用緩存較大,所以每個數(shù)據(jù)庫只需創(chuàng)建一個SessionFactory實例,當需要操作多個數(shù)據(jù)庫時,再為每一個數(shù)據(jù)庫指定一個SessionFactory實例。

特點:

  • 1線程安全,同一個實例可以被應用的多個線程共享
  • 2重量級,不能隨意創(chuàng)建和銷毀他的實例,一個數(shù)據(jù)庫,只需要創(chuàng)建一個SessionFactory的實例。
  • 3以后對Configuration對象勢力作出的修改都不會影響已經(jīng)創(chuàng)建好的SessionFactory實例,如果需要使用基于改動后的Configuration實例的SessionFactory,需要從Configuration對象中重新創(chuàng)建新的SessionFactory實例。

用法:

Configuration config = new Configuration(); ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = config.buildSessionFactory(sr);

Session:

Session是Hibernate持久化操作的基礎,負責管理所有與持久化有關的操作,Session與SessionFactory不同,它是輕量級的,也是非線程安全的。創(chuàng)建和銷毀不會消耗太多資源,可以為每一個請求分配一個Session。

特點:

  • 1不是線程安全的,應該避免多個線程共享同一個Session實例。
  • 2Session實例是輕量級的。
  • 3Session對象內(nèi)部有一個緩存,被稱為Hibernate第一緩存,他存放被當前工作單元中加載的對象,每個Session實例都有自己的緩存。

用法:

Session session = sessionFactory.openSession(); 常用方法: session.save(); session.update(); session.saveOrUpdate(); session.delete();

Transaction:

Transaction負責Hibernate的數(shù)據(jù)庫事務,其實Hibernate本身并不具備事務管理的能力,只是對底層事務接口進行了封裝,這樣有利于在不同環(huán)境或容器中移植,也可以直接訪問底層的事務接口。

用法:

Transaction tx = session.beginTransaction();

Query和Criteria:

Query和Criteria負責Hibernate的查詢操作。 Query實例封裝了一個HQL(Hibernate Query Language)查詢語句,HQL與SQL有些類似,只是HQL是面向對象的,它操作的是持久化類的類名和屬性名,而SQL操作的是表名和字段名。 Criteria實例完全封裝了字符串形式的查詢語句,它比Query實例更加面向對象,更適合執(zhí)行動態(tài)查詢。

本文只是對這幾個接口的一個簡單介紹,它們還有很多需要我們?nèi)W習跟了解的地方,這幾個接口有一個共同的目的,就是讓我們用更加面向對象的方式去編程。