99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

SSH Hibernate核心接口

2018-09-28 18:58 更新

Hibernate 核心接口

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

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



Configuration:

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

特點:

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

用法:

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

SessionFactory:

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

特點:

  • 1線程安全,同一個實例可以被應(yīng)用的多個線程共享
  • 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持久化操作的基礎(chǔ),負責(zé)管理所有與持久化有關(guān)的操作,Session與SessionFactory不同,它是輕量級的,也是非線程安全的。創(chuàng)建和銷毀不會消耗太多資源,可以為每一個請求分配一個Session。

特點:

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

用法:

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

Transaction:

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

用法:

Transaction tx = session.beginTransaction();

Query和Criteria:

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號