在使用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):
用法:
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):
用法:
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>
更多建議: