Hibernate基礎(chǔ):核心接口和數(shù)據(jù)類型
一 Hibernate中的核心接口.
有五個核心接口幾乎在每個Hibernate應(yīng)用中都會用到,是Hibernate基礎(chǔ)中的基礎(chǔ)。使用這些接口,你可以存儲與取出持續(xù)對象或者對事務(wù)進(jìn)行控制。
1 Configuration接口
Configuration(配置)對象用來配置和引導(dǎo)Hibernate。應(yīng)用使用一個配置實(shí)例來指定映射文件的位置和Hibernate的特定屬性,然后創(chuàng)建會話工廠。即使配置接口只擔(dān)當(dāng)了整個Hibernate應(yīng)用范圍內(nèi)一個相對較小的部分,但它卻是在你開始使用Hibernate時遇到的***個對象。
2 SessionFactory接口
應(yīng)用從SessionFactory(會話工廠)里獲得會話實(shí)例。與會話接口相比,這個對象不夠令人興奮。會話工廠當(dāng)然不是輕量級的!它打算在多個應(yīng)用線程間進(jìn)行共享。典型地,整個應(yīng)用只有***的一個會話工廠——例如在應(yīng)用初始化時被創(chuàng)建。然而,如果你的應(yīng)用使用Hibernate訪問多個數(shù)據(jù)庫,你需要對每一個數(shù)據(jù)庫使用一個會話工廠。會話工廠緩存了生成的SQL語句和Hibernate在運(yùn)行時使用的映射元數(shù)據(jù)。它也保存了在一個工作單元中讀入的數(shù)據(jù)并且可能在以后的工作單元中被重用(只有類和集合映射指定了這種二級緩存是想要的時才會如此)。
3 Session接口
Session(會話)接口是Hibernate應(yīng)用使用的主要接口。會話接口的實(shí)例是輕量級的并且創(chuàng)建與銷毀的代價也不昂貴。這很重要,因?yàn)槟愕膽?yīng)用可能始終在創(chuàng)建與銷毀會話,可能每一次請求都會如此。Hibernate會話并不是線程安全的,因此應(yīng)該被設(shè)計(jì)為每次只能在一個線程中使用。
Hibernate會話是一個介于連接和事務(wù)之間的概念。你可以簡單地認(rèn)為會話是對于一個單獨(dú)的工作單元已裝載對象的緩存或集合。Hibernate可以檢測到這個工作單元中對象的改變。我們有時也將會話稱為持續(xù)性管理器,因?yàn)樗彩桥c持續(xù)性有關(guān)的操作。例如存儲和取出對象的接口。注意,Hibernate會話與Web層的HttpSession沒有任何關(guān)系。當(dāng)我們在本書中使用會話時,我們指的是Hibernate會話。為了區(qū)別,有時我們將HttpSession對象稱為用戶會話。
4 Query與Criteria接口
Query(查詢)接口允許你在數(shù)據(jù)庫上執(zhí)行查詢并控制查詢?nèi)绾螆?zhí)行。查詢使用HQL或者本地數(shù)據(jù)庫的SQL方言編寫。查詢實(shí)例用來綁定查詢參數(shù),限定查詢返回的結(jié)果數(shù),并且最終執(zhí)行查詢。
Criteria(標(biāo)準(zhǔn))接口非常小,它允許你創(chuàng)建和執(zhí)行面向?qū)ο蟮臉?biāo)準(zhǔn)查詢。為了幫助應(yīng)用代碼減少冗余,Hibernate在會話接口上提供了一些快捷方法,允許你可以在一行代碼內(nèi)調(diào)用一個查詢。
5 Transaction接口
Transaction(事務(wù))接口是一個可選的API。Hibernate應(yīng)用可以選擇不使用這個接口,而是在它們自己的底層代碼中管理事務(wù)。事務(wù)將應(yīng)用代碼從下層的事務(wù)實(shí)現(xiàn)中抽象出來——這可能是一個JDBC事務(wù),一個JTA用戶事務(wù)或者甚至是一個公共對象請求代理結(jié)構(gòu)(CORBA)——允許應(yīng)用通過一組一致的API控制事務(wù)邊界。這有助于保持Hibernate應(yīng)用在不同類型的執(zhí)行環(huán)境或容器中的可移植性。
二 Hibernate數(shù)據(jù)類型
一個基礎(chǔ)的并且非常強(qiáng)大的體系結(jié)構(gòu)元素是Hibernate的類型的概念。Hibernate的類型對象將一個Java類型映射到數(shù)據(jù)庫字段的類型(實(shí)際上,類型可能跨越多個字段)。持續(xù)類所有的持續(xù)屬性,包括關(guān)聯(lián),都有一個對應(yīng)的Hibernate類型。這種設(shè)計(jì)使Hibernate變得極端靈活并易于擴(kuò)展。
內(nèi)建類型的范圍非常廣泛,覆蓋了所有的Java基礎(chǔ)類型和許多JDK類,包括java.util.Currency,java.util.Calendar,byte[]和va.io.Serializable。甚至更好一些,Hibernate支持用戶自定義類型。它提供了UserType和serType接口允許你增加自己的類型。使用這個特征,應(yīng)用使用的共通類例如Address,Name或MonetaryAmount就可以方便優(yōu)雅地進(jìn)行處理了。自定義類型被認(rèn)為是Hibernate的重要特征,并鼓勵你對它們進(jìn)行新的或創(chuàng)造性的使用.
【編輯推薦】