superwei

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          Hibernate的原理與配置快速入門(2)

            理解Hibernate的架構(gòu)

            當(dāng)你想用Hibernate開發(fā)自己的基于持久層的應(yīng)用時,第一件事情應(yīng)當(dāng)是熟悉它的編程接口。Hibernate的API接口設(shè)計得盡量簡潔明了,以方便開發(fā)人員。然而實際上由于ORM的復(fù)雜性,它的API一般都不可能設(shè)計得很簡單。但是別擔(dān)心,你沒有必要一下子了解所有的Hibernate的API接口。下面這張圖描述了Hibernate在應(yīng)用層和持久層中的一些重要的接口類:

            在上圖中,我們將應(yīng)用層放在了持久層的上部,實際上在傳統(tǒng)的項目中,應(yīng)用層充當(dāng)著持久層的一個客戶端角色。但對于一些簡單的項目來說,應(yīng)用層和持久層并沒有區(qū)分得那么清楚,這也沒什么,在這種情況下你可以將應(yīng)用層和持久層合并成了一層。

            在上圖中,Hibernate的接口大致可以分為以下幾種類型:

            · 一些被用戶的應(yīng)用程序調(diào)用的,用來完成基本的創(chuàng)建、讀取、更新、刪除操作以及查詢操作的接口。這些接口是Hibernate實現(xiàn)用戶程序的商業(yè)邏輯的主要接口,它們包括Session、Transaction和Query。

            · Hibernate用來讀取諸如映射表這類配置文件的接口,典型的代表有Configuration類。

            · 回調(diào)(Callback)接口。它允許應(yīng)用程序能對一些事件的發(fā)生作出相應(yīng)的操作,例如Interceptor、Lifecycle和Validatable都是這一類接口。

            · 一些可以用來擴(kuò)展Hibernate的映射機(jī)制的接口,例如UserType、CompositeUserType和IdentifierGenerator。這些接口可由用戶程序來實現(xiàn)(如果有必要)。

            Hibernate使用了J2EE架構(gòu)中的如下技術(shù):JDBC、JTA、JNDI。其中JDBC是一個支持關(guān)系數(shù)據(jù)庫操作的一個基礎(chǔ)層;它與JNDI和JTA一起結(jié)合,使得Hibernate可以方便地集成到J2EE應(yīng)用服務(wù)器中去。

            在這里,我們不會詳細(xì)地去討論Hibernate API接口中的所有方法,我們只簡要講一下每個主要接口的功能,如果你想了解得更多的話,你可以在Hibernate的源碼包中的net.sf.hibernate子包中去查看這些接口的源代碼。下面我們依次講一下所有的主要接口:

            核心接口

            以下5個核心接口幾乎在任何實際開發(fā)中都會用到。通過這些接口,你不僅可以存儲和獲得持久對象,并且能夠進(jìn)行事務(wù)控制。

            Session接口

            Session接口對于Hibernate 開發(fā)人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創(chuàng)建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創(chuàng)建以及銷毀Session對象,如果Session的開銷太大,會給系統(tǒng)帶來不良影響。但值得注意的是Session對象是非線程安全的,因此在你的設(shè)計中,最好是一個線程只創(chuàng)建一個Session對象。

            在Hibernate的設(shè)計者的頭腦中,他們將session看作介于數(shù)據(jù)連接與事務(wù)管理一種中間接口。我們可以將session想象成一個持久對象的緩沖區(qū),Hibernate能檢測到這些持久對象的改變,并及時刷新數(shù)據(jù)庫。我們有時也稱Session是一個持久層管理器,因為它包含這一些持久層相關(guān)的操作,諸如存儲持久對象至數(shù)據(jù)庫,以及從數(shù)據(jù)庫從獲得它們。請注意,Hibernate 的session不同于JSP應(yīng)用中的HttpSession。當(dāng)我們使用session這個術(shù)語時,我們指的是Hibernate中的session,而我們以后會將HttpSesion對象稱為用戶session。

            SessionFactory 接口

            這里用到了一個設(shè)計模式――工廠模式,用戶程序從工廠類SessionFactory中取得Session的實例。

            令你感到奇怪的是SessionFactory并不是輕量級的!實際上它的設(shè)計者的意圖是讓它能在整個應(yīng)用中共享。典型地來說,一個項目通常只需要一個SessionFactory就夠了,但是當(dāng)你的項目要操作多個數(shù)據(jù)庫時,那你必須為每個數(shù)據(jù)庫指定一個SessionFactory。
          SessionFactory在Hibernate中實際起到了一個緩沖區(qū)的作用,它緩沖了Hibernate自動生成的SQL語句和一些其它的映射數(shù)據(jù),還緩沖了一些將來有可能重復(fù)利用的數(shù)據(jù)。

            Configuration 接口

            Configuration接口的作用是對Hibernate進(jìn)行配置,以及對它進(jìn)行啟動。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個SessionFactory對象。

            雖然Configuration接口在整個Hibernate項目中只扮演著一個很小的角色,但它是啟動hibernate時你所遇到的每一個對象。

            Transaction 接口

            Transaction接口是一個可選的API,你可以選擇不使用這個接口,取而代之的是Hibernate的設(shè)計者自己寫的底層事務(wù)處理代碼。 Transaction接口是對實際事務(wù)實現(xiàn)的一個抽象,這些實現(xiàn)包括JDBC的事務(wù)、JTA中的UserTransaction、甚至可以是CORBA事務(wù)。之所以這樣設(shè)計是能讓開發(fā)者能夠使用一個統(tǒng)一事務(wù)的操作界面,使得自己的項目可以在不同的環(huán)境和容器之間方便地移值。

            Query和Criteria接口

            Query接口讓你方便地對數(shù)據(jù)庫及持久對象進(jìn)行查詢,它可以有兩種表達(dá)方式:HQL語言或本地數(shù)據(jù)庫的SQL語句。Query經(jīng)常被用來綁定查詢參數(shù)、限制查詢記錄數(shù)量,并最終執(zhí)行查詢操作。

            Criteria接口與Query接口非常類似,它允許你創(chuàng)建并執(zhí)行面向?qū)ο蟮臉?biāo)準(zhǔn)化查詢。

            值得注意的是Query接口也是輕量級的,它不能在Session之外使用。

            Callback 接口

            當(dāng)一些有用的事件發(fā)生時――例如持久對象的載入、存儲、刪除時,Callback接口會通知Hibernate去接收一個通知消息。一般而言,Callback接口在用戶程序中并不是必須的,但你要在你的項目中創(chuàng)建審計日志時,你可能會用到它。

          posted on 2005-10-31 11:30 小辭猬 閱讀(314) 評論(0)  編輯  收藏 所屬分類: JAVA

          主站蜘蛛池模板: 东丽区| 商都县| 富锦市| 茂名市| 华坪县| 高唐县| 敦化市| 天祝| 叙永县| 平山县| 江都市| 夹江县| 潼关县| 清流县| 襄樊市| 南宁市| 墨竹工卡县| 鸡西市| 莱州市| 富裕县| 宜兰县| 车致| 从化市| 乐陵市| 含山县| 商都县| 定日县| 鄢陵县| 朝阳市| 康定县| 温州市| 曲松县| 万荣县| 临沧市| 麻阳| 从化市| 德格县| 克拉玛依市| 揭东县| 内江市| 民乐县|