SSH Hibernate核心接口

2018-09-28 18:58 更新

Hibernate 核心接口

在使用Hibernate的時(shí)候,我們通常都會(huì)用的Configuration、SessionFactory、Session、Transaction、Query和Criteria等接口。通過這些接口可以,不僅可以存儲(chǔ)與取出持久化對(duì)象,還可以對(duì)事務(wù)進(jìn)行管理。下面對(duì)著幾個(gè)接口一一介紹:

幾個(gè)接口之間的層次關(guān)系如下圖:



Configuration:

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

特點(diǎn):

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

用法:

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

SessionFactory:

SessionFactory負(fù)責(zé)創(chuàng)建Session實(shí)例,每個(gè)SessionFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)。SessionFactory是重量級(jí)的,占用緩存較大,所以每個(gè)數(shù)據(jù)庫(kù)只需創(chuàng)建一個(gè)SessionFactory實(shí)例,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),再為每一個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory實(shí)例。

特點(diǎn):

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

用法:

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

Session:

Session是Hibernate持久化操作的基礎(chǔ),負(fù)責(zé)管理所有與持久化有關(guān)的操作,Session與SessionFactory不同,它是輕量級(jí)的,也是非線程安全的。創(chuàng)建和銷毀不會(huì)消耗太多資源,可以為每一個(gè)請(qǐng)求分配一個(gè)Session。

特點(diǎn):

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

用法:

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

Transaction:

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

用法:

Transaction tx = session.beginTransaction();

Query和Criteria:

Query和Criteria負(fù)責(zé)Hibernate的查詢操作。Query實(shí)例封裝了一個(gè)HQL(Hibernate Query Language)查詢語(yǔ)句,HQL與SQL有些類似,只是HQL是面向?qū)ο蟮?,它操作的是持久化類的類名和屬性名,而SQL操作的是表名和字段名。Criteria實(shí)例完全封裝了字符串形式的查詢語(yǔ)句,它比Query實(shí)例更加面向?qū)ο?,更適合執(zhí)行動(dòng)態(tài)查詢。

本文只是對(duì)這幾個(gè)接口的一個(gè)簡(jiǎn)單介紹,它們還有很多需要我們?nèi)W(xué)習(xí)跟了解的地方,這幾個(gè)接口有一個(gè)共同的目的,就是讓我們用更加面向?qū)ο蟮姆绞饺ゾ幊獭?/p>

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)