丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說(shuō) 明 你 沒(méi) 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1
          Hibernate 使用了J2EE 架構(gòu)中的如下技術(shù):JDBC 、JTA 、JNDI 。其中JDBC 是一個(gè)支持關(guān)系 數(shù)據(jù)庫(kù)操作的一個(gè)基礎(chǔ)層;它與JNDI 和JTA 一起結(jié)合,使得Hibernate 可以方便地集成到J2EE 應(yīng)用服務(wù)器中去。
          討論Hibernate API 接口中的所有方法,只簡(jiǎn)要講一下每個(gè)主要 接口的功能,如果你想了解得更多的話,你可以在Hibernate 的源碼包中的net.sf.hibernate 子包中 去查看這些接口的源代碼。下面我們依次講一下所有的主要接口:
          核心接口
          以下5 個(gè)核心接口幾乎在任何實(shí)際開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,你不僅可以存儲(chǔ)和獲得持 久對(duì)象,并且能夠進(jìn)行事務(wù)控制。
          Configuration 接口
          Configuration 接口的作用是對(duì)Hibernate 進(jìn)行配置,以及對(duì)它進(jìn)行啟動(dòng)。在Hibernate 的啟動(dòng)
          過(guò)程中,Configuration 類(lèi)的實(shí)例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個(gè)
          SessionFactory 對(duì)象。

          雖然Configuration 接口在整個(gè)Hibernate 項(xiàng)目中只扮演著一個(gè)很小的角色,但它是啟動(dòng)
          hibernate 時(shí)你所遇到的每一個(gè)對(duì)象。

           
          SessionFactory 接口
          這里用到了一個(gè)設(shè)計(jì)模式――工廠模式,用戶(hù)程序從工廠類(lèi)SessionFactory 中取得Session 的 實(shí)例。 令你感到奇怪的是SessionFactory 并不是輕量級(jí)的!實(shí)際上它的設(shè)計(jì)者的意圖是讓它能在整個(gè) 應(yīng)用中共享。典型地來(lái)說(shuō),一個(gè)項(xiàng)目通常只需要一個(gè)SessionFactory 就夠了,但是當(dāng)你的項(xiàng)目要操 作多個(gè)數(shù)據(jù)庫(kù)時(shí),那你必須為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory 。SessionFactory 在Hibernate 中實(shí)際起到了一個(gè)緩沖區(qū)的作用,它緩沖了Hibernate 自動(dòng)生成的SQL 語(yǔ)句和一些其它的映射數(shù)據(jù),還緩沖了一些將來(lái)有可能重復(fù)利用的數(shù)據(jù)。
           
          Session 接口
          Session 接口對(duì)于Hibernate 開(kāi)發(fā)人員來(lái)說(shuō)是一個(gè)最重要的接口。然而在Hibernate 中,實(shí)例 化的Session 是一個(gè)輕量級(jí)的類(lèi),創(chuàng)建和銷(xiāo)毀它都不會(huì)占用很多資源。這在實(shí)際項(xiàng)目中確實(shí)很重要,
          因?yàn)樵诳蛻?hù)程序中,可能會(huì)不斷地創(chuàng)建以及銷(xiāo)毀Session 對(duì)象,如果Session 的開(kāi)銷(xiāo)太大,會(huì)給系
          統(tǒng)帶來(lái)不良影響。但值得注意的是Session 對(duì)象是非線程安全的,因此在你的設(shè)計(jì)中,最好是一個(gè) 線程只創(chuàng)建一個(gè)Session 對(duì)象。

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

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

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


          Criteria 接口與Query 接口非常類(lèi)似,它允許你創(chuàng)建并執(zhí)行面向?qū)ο蟮臉?biāo)準(zhǔn)化查詢(xún)。
          值得注意的是Query 接口也是輕量級(jí)的,它不能在Session 之外使用。
           
          Callback 接口
          當(dāng)一些有用的事件發(fā)生時(shí)――例如持久對(duì)象的載入、存儲(chǔ)、刪除時(shí),Callback 接口會(huì)通知
          Hibernate 去接收一個(gè)通知消息。一般而言,Callback 接口在用戶(hù)程序中并不是必須的,但你要在你
          的項(xiàng)目中創(chuàng)建審計(jì)日志時(shí),你可能會(huì)用到它。

          一個(gè)重要的術(shù)語(yǔ):Type
          Hibernate 的設(shè)計(jì)者們發(fā)明了一個(gè)術(shù)語(yǔ):Type ,它在整個(gè)構(gòu)架中是一個(gè)非常基礎(chǔ)、有著強(qiáng)大功
          能的元素。一個(gè)Type 對(duì)象能將一個(gè)Java 類(lèi)型映射到數(shù)據(jù)庫(kù)中一個(gè)表的字段中去(實(shí)際上,它可以 映射到表的多個(gè)字段中去)。持久類(lèi)的所有屬性都對(duì)應(yīng)一個(gè)type 。這種設(shè)計(jì)思想使用Hibernate 有著 高度的靈活性和擴(kuò)展性。

          Hibernate 內(nèi)置很多type 類(lèi)型,幾乎包括所有的Java 基本類(lèi)型,例如Java.util.Currency 、
          Java.util.calendar 、byte[] 和Java.io.Serializable 。

          不僅如此, Hibernate 還支持用戶(hù)自定義的type ,通過(guò)實(shí)現(xiàn)接口UserType 和接口
          CompositeUserType ,你可以加入自己的type 。你可以利用這種特色讓你的項(xiàng)目中使用自定義的諸 如Address 、Name 這樣的type,這樣你就可以獲得更大的便利,讓你的代碼更優(yōu)雅。自定義type 在Hibernate 中是一項(xiàng)核心特色,它的設(shè)計(jì)者鼓勵(lì)你多多使用它來(lái)創(chuàng)建一個(gè)靈活、優(yōu)雅的項(xiàng)目!

          策略接口
          Hibernate 與某些其它開(kāi)源軟件不同的還有一點(diǎn)――高度的可擴(kuò)展性,這通過(guò)它的內(nèi)置策略機(jī)制 來(lái)實(shí)現(xiàn)。當(dāng)你感覺(jué)到Hibernate 的某些功能不足,或者有某些缺陷時(shí),你可以開(kāi)發(fā)一個(gè)自己的策略 來(lái)替換它,而你所要做的僅僅只是繼承它的某個(gè)策略接口,然后實(shí)現(xiàn)你的新策略就可以了,以下是
          它的策略接口:

          · 主鍵的生成(IdentifierGenerator 接口)
          · 本地SQL 語(yǔ)言支持(Dialect 抽象類(lèi))
          · 緩沖機(jī)制(Cache 和CacheProvider 接口)
          · JDBC 連接管理(ConnectionProvider 接口)
          · 事務(wù)管理(TransactionFactory, Transaction, 和TransactionManagerLookup 接口)
          · ORM 策略(ClassPersister 接口)
          · 屬性訪問(wèn)策略(PropertyAccessor 接口)
          · 代理對(duì)象的創(chuàng)建(ProxyFactory 接口)
          Hibernate 為以上所列的機(jī)制分別創(chuàng)建了一個(gè)缺省的實(shí)現(xiàn),因此如果你只是要增強(qiáng)它的某個(gè)策略
          的功能的話,只需簡(jiǎn)單地繼承這個(gè)類(lèi)就可以了,沒(méi)有必要從頭開(kāi)始寫(xiě)代碼。

          以上就是Hibernate 的一些核心接口,但當(dāng)我們真正開(kāi)始用它進(jìn)行開(kāi)發(fā)時(shí),你的腦海里可能總
          會(huì)有一個(gè)疑問(wèn):我是通過(guò)什么方式,并從哪里取得Session 的呢?以下我們就解答這個(gè)問(wèn)題。


          創(chuàng)建一個(gè)SessionFactory 對(duì)象
          為了能創(chuàng)建一個(gè)SessionFactory 對(duì)象,你必須在Hibernate 初始化時(shí)創(chuàng)建一個(gè)Configuration
          類(lèi)的實(shí)例,并將已寫(xiě)好的映射文件交由它處理。這樣, Configuration 對(duì)象就可以創(chuàng)建一個(gè)
          SessionFactory 對(duì)象,當(dāng)SessionFactory 對(duì)象創(chuàng)建成功后,Configuration 對(duì)象就沒(méi)有用了,你可以簡(jiǎn)單地拋棄它。如下是示例代碼:

          Configuration cfg = new Configuration();

          SessionFactory sessionFactory = cfg.buildSessionFactory();

          Session session=sessionFactory.openSession();


          Transaction ts=session.beginTransaction();

          session.save(..);

          ts.commit() 
          posted on 2007-09-01 14:42 Crying 閱讀(649) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): hibernate
          主站蜘蛛池模板: 隆林| 灵璧县| 黄浦区| 唐山市| 仲巴县| 新化县| 东乌珠穆沁旗| 满洲里市| 大宁县| 洪江市| 扶沟县| 花莲市| 山西省| 庆元县| 景泰县| 东阿县| 德保县| 柳州市| 白玉县| 西安市| 南宁市| 郸城县| 高邮市| 饶河县| 廊坊市| 大兴区| 西吉县| 黄龙县| 湘乡市| 崇明县| 曲松县| 盘山县| 方城县| 闽清县| 呈贡县| 四子王旗| 云梦县| 石泉县| 迁西县| 达拉特旗| 宝山区|