(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf_第1頁(yè)
(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf_第2頁(yè)
(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf_第3頁(yè)
(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf_第4頁(yè)
(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)java持久層設(shè)計(jì)方法的研究.pdf.pdf 免費(fèi)下載

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要 隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展 數(shù)據(jù)共享成為信息時(shí)代的新需求 數(shù)據(jù)共 享要求數(shù)據(jù)不但是可訪問(wèn)的 而且必須是可持久的 在使用面向?qū)ο蟮姆椒▽?duì)數(shù)據(jù)進(jìn)行 展示和處理時(shí) 數(shù)據(jù)和處理流程被封裝到對(duì)象中 使得對(duì)數(shù)據(jù)的訪問(wèn)和持久化研究上升 為對(duì)對(duì)象的訪問(wèn)和持久化的研究 目前數(shù)據(jù)持久化可以采用文件系統(tǒng) 對(duì)象數(shù)據(jù)庫(kù)以及 關(guān)系數(shù)據(jù)庫(kù)等多種方式 而關(guān)系數(shù)據(jù)庫(kù)作為目前發(fā)展最成熟的一種持久化機(jī)制被應(yīng)用于 絕大多數(shù)的管理系統(tǒng)中 一般而言 基于關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)通過(guò)j d b c 在業(yè)務(wù)邏輯 層直接操縱數(shù)據(jù)庫(kù) 將對(duì)對(duì)象的操作與對(duì)關(guān)系數(shù)據(jù)庫(kù)的操作混雜在一起 使得系統(tǒng)不利 于維護(hù) 通過(guò)對(duì)j d b c o r m 等當(dāng)前國(guó)內(nèi)外常用數(shù)據(jù)持久化方式的分析 提出一個(gè)粗粒度持 久層組件 該組件封裝了連接池和與業(yè)務(wù)邏輯無(wú)關(guān)的常用數(shù)據(jù)庫(kù)操作 并提供了對(duì)事務(wù) 處理 存儲(chǔ)過(guò)程調(diào)用等復(fù)雜操作的支持 可單獨(dú)用于設(shè)計(jì)持久層 也可結(jié)合d a o v o 等j 2 e e 核心模式完成面向?qū)ο蟮某志脤釉O(shè)計(jì) 將該組件應(yīng)用于 本科生畢業(yè)設(shè)計(jì)管理 信息系統(tǒng) 持久層的開(kāi)發(fā) 證實(shí)其具有操作簡(jiǎn)潔性及可重用性 同時(shí)結(jié)合d a o 模式對(duì) 本科生畢業(yè)設(shè)計(jì)管理系統(tǒng)的持久層進(jìn)行改進(jìn) 證實(shí)其還具有靈活性和可擴(kuò)展性 在相同 條件下 通過(guò)設(shè)置不同的負(fù)載條件執(zhí)行測(cè)試計(jì)劃 對(duì)比該組件與h i b e r n a t e 的執(zhí)行效率 證實(shí)其具有較高的使用價(jià)值 關(guān)鍵詞 持久層 粗粒度 j d b c o r m d a o a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to fc o m p u t e rt e c h n o l o g ya n dn e t w o r kt e c h n i q u e t h ed a t a s h a r i n gh a sb e e nt h ed e m a n do ft h ei n f o r m a t i o na g e i no r d e rt oi m p l e m e n tt h ed a t as h a r i n g d a t as h o u l dn o to n l yb ea c c e s s i b l e b u ta l s ob ep e r s i s t e n t w h e n a p p l i n go b j e c t o r i e n t e d p r o g r a m m i n gm e t h o df o rp r o c e s s i n ga n ds h o w i n gd a t a d a t aa n di t sp r o c e s s i n gh a sb e e n w r a p p e di n t oal o to fo b j e c t s ot h es t u d yo fd a t ap e r s i s t e n c et u r n e dt ot h eo b j e c t s t h e r ea r e m a n yw a y st op e r s i s td a t ai nr e c e n ty e a r s s u c ha sf i l es y s t e m o b j e c to r i e n t e dd a t a b a s es y s t e m o o d b s r e l a t i o nd a t a b a s em a n a g e m e n ts y s t e m r d b m s e t e b e c a u s et h er d b m si st h e m o s tm a t u r ed a t ap e r s i s t e n tm e c h a n i s m i th a sb e e nu s e di nap l u m p i n gm a j o r i t yo f m a n a g e m e n ti n f o r m a t i o ns y s t e m s g e n e r a l l ys p e a k i n g a p p l i c a t i o n su s i n gt h er d b m sa st h e d a t ap e r s i s t e n c em e c h a n i s mm a n i p u l a t et h er d b m s b yj d b co nt h el o g i cl a y e r i tm a k e st h e m a n i p u l a t i o no ft h eo b j e c ta n dr d b m sm i x e dt o g e t h e r l o w e rt h em a i n t a i n a b i l i t yo ft h e s y s t e m b ya n a l y z i n gf i v ed a t ap e r s i s t e n c em e t h o d sa th o m ea n da b r o a d s u c ha sj d b c o r m a c o a r s e g r a i n e dc o m p o n e n tb a s e dj d b ch a sb e e nd e s i g n e d i tn o to n l yp r o v i d e si n t e r f a c e sf o r r d b m s sc o m m o no p e r a t i o n b u tf e a t u r e ss u c ha st r a n s a c t i o nm a n a g e m e n ta n dc a l l i n gt o s t o r e dp r o c e d u r e s w h i c ha r ei n d e p e n d e n tw i t hb u s i n e s sl o g i c t h ec o m p o n e n tc a nb eu s e d s e p a r a t e l yt od ot h ed a t ap e r s i s t e n c el a y e rd e s i g n o rw i t ht h ej 2 e ec o r em o d e s f o re x a m p l e d a o t om a k et h ep e n s i s t e n c eo b j e c to r i e n t e d i th a sb e e na p p l i e dt od e s i g nt h ed a t a p e r s i s t e n c el a y e ri np r o j e c to f u n d e r g r a d u a t es t u d e n t s t h e s i s e sm a n a g e m e n ts y s t e m t o p r o v et h eu s a b i l i t y c o n c i s i o na n dr e u s a b i l i t yo ft h ec o m p o n e n t t h e ni m p r o v e dt h e p e r s i s t e n c el a y e rb ya p p l i n gd a ot os h o wi t sf l e x i b i l i t ya n de x t e n s i b i l i t y f i n a l l y c o m p a r e d i t sc a p a b i l i t i e sw i t hh i b e r n a t eu n d e rs i r n u l a rc o n d i t i o n so fh a r d w a r ea n ds o f t w a r e p r o v i n g t h a tt h ec o m p o n e n ti sw i t hh i g h l yp r a c t i c a lv a l u e k e yw o r d s p e r s i s t e n c el a y e r c o a r s e g r a i n e d j d b c o r m d a o 論文獨(dú)創(chuàng)性聲明 本人聲明 本人所呈交的學(xué)位論文是在導(dǎo)師的指導(dǎo)下 獨(dú)立進(jìn)行研究工 作所取得的成果 除論文中已經(jīng)注明引用的內(nèi)容外 對(duì)論文的研究做出重 要貢獻(xiàn)的個(gè)人和集體 均已在文中以明確方式標(biāo)明 本論文中不包含任何 未加明確注明的其他個(gè)人或集體已經(jīng)公開(kāi)發(fā)表的成果 本聲明的法律責(zé)任由本人承擔(dān) 論吝作者躲靳赴 脾 月二日 論文知識(shí)產(chǎn)權(quán)權(quán)屬聲明 本人在導(dǎo)師指導(dǎo)下所完成的論文及相關(guān)的職務(wù)作品 知識(shí)產(chǎn)權(quán)歸屬學(xué) 校 學(xué)校享有以任何方式發(fā)表 復(fù)制 公開(kāi)閱覽 借閱以及申請(qǐng)專利等權(quán) 利 本人離校后發(fā)表或使用學(xué)位論文或與該論文直接相關(guān)的學(xué)術(shù)論文或成 果時(shí) 署名單位仍然為長(zhǎng)安大學(xué) 保密的論文在解密后應(yīng)遵守此規(guī)定 論文作者簽名 導(dǎo)師簽名 靳燕 難 鋼 d 8 年多月2 日 2 髫年6r9 e l 長(zhǎng)安大學(xué)碩士學(xué)位論文 1 1 研究背景和意義 第一章緒論 隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展 網(wǎng)絡(luò)技術(shù)的迅猛革新 當(dāng)今社會(huì)己進(jìn)入了信息時(shí)代 原本需要郵寄的紙質(zhì)報(bào)表或者必須親自到柜臺(tái)辦理的轉(zhuǎn)賬業(yè)務(wù) 現(xiàn)在足不出戶通過(guò) i n t e r n e t 可以方便完成 實(shí)現(xiàn)以上服務(wù)的基礎(chǔ)是數(shù)據(jù)共享 數(shù)據(jù)共享要求數(shù)據(jù)不但是可 訪問(wèn)的 而且必須是可持久的 在使用面向?qū)ο蟮姆椒▽?duì)數(shù)據(jù)進(jìn)行展示和處理時(shí) 數(shù)據(jù) 和處理流程被封裝到對(duì)象中 使得對(duì)數(shù)據(jù)的訪問(wèn)和持久化研究上升為對(duì)對(duì)象的訪問(wèn)和持 久化的研究 l l 對(duì)象的持久化是指對(duì)象的生命周期在被創(chuàng)建和使用后能夠通過(guò)持久化機(jī) 制而延續(xù) 可以在下一次系統(tǒng)啟動(dòng)時(shí)繼續(xù)使用 通過(guò)持久化的對(duì)象可以獲得持久的生命 周期 而對(duì)象封裝的數(shù)據(jù)經(jīng)過(guò)該操作可以在系統(tǒng)和網(wǎng)絡(luò)中長(zhǎng)期共享 目前 數(shù)據(jù)持久化可以采用文件系統(tǒng) 對(duì)象數(shù)據(jù)庫(kù)以及關(guān)系數(shù)據(jù)庫(kù)等多種方式 文 一 件系統(tǒng)可以滿足數(shù)據(jù)存儲(chǔ)的基本需求 但是不能提供對(duì)數(shù)據(jù)排序 累加等分析操作 在 數(shù)據(jù)插入或刪除中不支持事務(wù) 不能滿足安全性要求 而且不能實(shí)現(xiàn)多個(gè)線程或程序異 步讀寫數(shù)據(jù) 因此文件系統(tǒng)因?yàn)椴荒軡M足大多數(shù)數(shù)據(jù)持久化的需求而較少使用 對(duì)象數(shù)據(jù)庫(kù) o b j e c to r i e n t e dd a t a b a s e 簡(jiǎn)稱o o d b 是采用面向?qū)ο蟾拍钤O(shè)計(jì)的 新型數(shù)據(jù)庫(kù) 與以往的層次 網(wǎng)狀以及關(guān)系數(shù)據(jù)模型不同 它能夠更好的匹配面向?qū)ο?技術(shù) 但是從面向?qū)ο髷?shù)據(jù)庫(kù)概念的提出至今僅有二十年時(shí)間 它還無(wú)法像當(dāng)前主流的 關(guān)系型數(shù)據(jù)庫(kù)一樣成熟 性能以及標(biāo)準(zhǔn)化是它目前的瓶頸 關(guān)系數(shù)據(jù)庫(kù)能夠透明地處理記錄的添加 刪除 排序操作 通過(guò)主鍵與字段名隨機(jī) 訪問(wèn)記錄與字段 還可以通過(guò)表間關(guān)系或表內(nèi)關(guān)系表達(dá)對(duì)象間的各種約束和關(guān)聯(lián) 就現(xiàn) 階段而言 關(guān)系數(shù)據(jù)庫(kù)的理論非常完善 并且得到了數(shù)十年的實(shí)踐考驗(yàn) 無(wú)論從性能上 還是數(shù)據(jù)完備性的角度 關(guān)系數(shù)據(jù)庫(kù)都有著無(wú)可比擬的優(yōu)勢(shì) 成為包括面向?qū)ο蟮能浖?項(xiàng)目在內(nèi)的大多數(shù)軟件系統(tǒng)數(shù)據(jù)存儲(chǔ)的首選 一般而言 基于面向?qū)ο蠹夹g(shù)開(kāi)發(fā)的應(yīng)用軟件系統(tǒng)通常采用三層結(jié)構(gòu) 即表示層 業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)層 在三層結(jié)構(gòu)中 業(yè)務(wù)邏輯層通過(guò)j d b c 直接操縱數(shù)據(jù)庫(kù) 將對(duì) 對(duì)象的操作與對(duì)關(guān)系數(shù)據(jù)庫(kù)的操作混雜在一起 使得代碼可讀性差且不利于維護(hù) 而且 j d b c 操縱數(shù)據(jù)庫(kù)的代碼相當(dāng)繁瑣 每次執(zhí)行操作前都需設(shè)置數(shù)據(jù)源 驅(qū)動(dòng) 代碼重復(fù) 量大 對(duì)該問(wèn)題的解決辦法是從業(yè)務(wù)邏輯層中單獨(dú)分出一個(gè)持久層 使其專門處理與數(shù) 第一章緒論 據(jù)庫(kù)的交互操作 這樣當(dāng)數(shù)據(jù)底層修改時(shí) 業(yè)務(wù)邏輯層可以不變或作較小的修改 所謂持久層是指系統(tǒng)中一個(gè)相對(duì)獨(dú)立的邏輯層面 或者稱為組件 其專注于數(shù)據(jù) 持久化的實(shí)現(xiàn) 并且能夠在不同項(xiàng)目中重用 大大簡(jiǎn)化了數(shù)據(jù)的增 刪 改 查功能的 開(kāi)發(fā)過(guò)程 同時(shí)又不喪失多層結(jié)構(gòu)的天然優(yōu)勢(shì) 對(duì)于j a v a 持久層而言 還必須繼承延續(xù) j 2 e e 特有的可伸縮性和可擴(kuò)展性 組件技術(shù)為實(shí)現(xiàn)某些通用目標(biāo)定義良好的接口 用 戶可根據(jù)具體應(yīng)用對(duì)組件進(jìn)行擴(kuò)展 將庫(kù)的可重用性與特定程序的可定制性相結(jié)合 是 軟件重用方法中最重要的一種 j d b c 為實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)訪問(wèn)定義了良好的接口 嚴(yán)格 來(lái)講j d b c 也是持久層的組件 但是該組件的粒度過(guò)細(xì) 一個(gè)簡(jiǎn)單操作涉及多個(gè)對(duì)象及 其方法 增加了編碼難度 因此 設(shè)計(jì)一個(gè)粗粒度的持久層組件 使其在保障信息共享 和數(shù)據(jù)分布式處理的基礎(chǔ)上具有易操作 可移植的特性具有十分重要的現(xiàn)實(shí)意義 1 2 國(guó)內(nèi)外研究現(xiàn)狀 自從1 9 9 5 年5 月s u nm i c r o s y s t e m s 公司正式公布j a v a 程序設(shè)計(jì)語(yǔ)言和j a v a 平臺(tái)以 來(lái) 出現(xiàn)大量的使用j a v a 語(yǔ)言編寫的程序 其中也包括數(shù)據(jù)庫(kù)應(yīng)用程序 起初由于沒(méi)有 一個(gè)操作數(shù)據(jù)庫(kù)的j a v aa p i 編程人員要連接數(shù)據(jù)庫(kù)就不得不在j a v a 程序中加入c 語(yǔ) 言的o d b c 由于o d b c 的介入使得諸如平臺(tái)無(wú)關(guān)性 面向?qū)ο筇匦缘萰 a v a 的優(yōu)秀特 性無(wú)法充分發(fā)揮 1 9 9 7 年2 月1 8 日s u n 公布了j d k l 1 版本 其中的數(shù)據(jù)庫(kù)應(yīng)用程序 開(kāi)發(fā)接口 s q l 包 也就是j d b ca p i 成為j a v a 語(yǔ)言的標(biāo)準(zhǔn)組件 d b c 是一套規(guī)范 它規(guī)定了訪問(wèn)數(shù)據(jù)庫(kù)的統(tǒng)一接口 并為各個(gè)數(shù)據(jù)庫(kù)廠商提供標(biāo) 準(zhǔn)的接口實(shí)現(xiàn) j d b c 通過(guò)在業(yè)務(wù)方法中直接嵌入s q l 語(yǔ)句實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn) 是最 基本的數(shù)據(jù)庫(kù)訪問(wèn)方式 隨著j a v a 技術(shù)的不斷發(fā)展 1 9 9 8 年它被細(xì)分為針對(duì)企業(yè)網(wǎng)絡(luò)應(yīng)用的j 2 e e j a v a2 e n t e r p r i s ee d i t i o n 針對(duì)普通p c 應(yīng)用的j 2 s e j a v a2s t a n d a r de d i t i o n 和針對(duì)嵌入 式設(shè)備及消費(fèi)類電器的j 2 m e j a v a2m i c r oe d i t i o n 三個(gè)版本 而本文主要研究j 2 e e 平臺(tái)下的數(shù)據(jù)持久機(jī)制以及持久層的設(shè)計(jì)方法 在j 2 e e 平臺(tái)下 不僅可以使用上面提到的j d b c 對(duì)對(duì)象進(jìn)行持久化 除此之外它 還提供了四種對(duì)象持久化模式 2 j b m p 模式 b e a n m a n a g e dp e r s i s t e n c e c m p 模式 c o n t a i n e r m a n a g e dp e r s i s t e n c e o r m o b j e c tr e l a t i o n a lm a p p i n g 模式和j d o 模 式 j a v ad a t ao b j e c t s 這四種持久化模式都對(duì)j d b c 進(jìn)行了封裝 為上層業(yè)務(wù)提供 了更為強(qiáng)大的接口 2 長(zhǎng)安大學(xué)碩士學(xué)位論文 1 9 9 8 年是j a v a 迅猛發(fā)展的 年 在這一年不僅發(fā)生了上面提到的j 2 e e j 2 s e 和 j 2 m e 的劃分 s u n 公司還于當(dāng)年發(fā)布了j s p s e r v l e t 和e j b e n t e r p r i s ej a v a b e a n s 企業(yè) 級(jí)的j a v a b e a n s 規(guī)范 e j b 規(guī)范中定義了實(shí)體b e a n 的兩種持久化規(guī)范 b e a n 管理的持久化 b e a nm a n a g e d p e r s i s t e n c e b m p 和容器管理的持久化 c o n t a i n e rm a n a g e dp e r s i s t e n c e c m p 在 b m p 模式中 開(kāi)發(fā)者必須自己用硬編碼s q l 完成b e a n 的持久化 而在c m p 中 b e a n 的持久化是由容器完成的 在實(shí)現(xiàn)實(shí)體b e a n 時(shí)需要完成以下類的開(kāi)發(fā) 主鍵類 遠(yuǎn)程 接口類 本地接口類 工廠類 使用c m p 雖然不用學(xué)習(xí)s q l 卻需要學(xué)習(xí)e j b 規(guī)范為 c m p 定義的查詢語(yǔ)言e j b q l 作為企業(yè)級(jí)的j a v a b e a n s s u n 對(duì)e j b 的定位除了作為一個(gè)包含業(yè)務(wù)邏輯的可重用 組件外 e j b 更被賦予了諸如 可移植性 安全刀 可伸縮性 交易性 等 特征 s u n 在發(fā)布j 2 e e 相關(guān)規(guī)范和產(chǎn)品時(shí)承諾 j 2 e e 將會(huì)使開(kāi)發(fā)變得更容易 從而會(huì) 顯著降低開(kāi)發(fā)成本 但在j 2 e e 發(fā)布時(shí) 人們發(fā)現(xiàn)被認(rèn)為是j 2 e e 中最有價(jià)值的組成部分 e 舊卻是如此的復(fù)雜 在編寫e j b 時(shí)需要大量的配置 而且還需要實(shí)現(xiàn)一大堆的接 口 e j b 2 x 剛出來(lái)的幾年 國(guó)內(nèi)許多程序員被e j b 的優(yōu)點(diǎn)吸引 當(dāng)他們開(kāi)始熟悉并使 用e j b 時(shí) 卻發(fā)現(xiàn)并不象他們想象的那么美妙而逐漸對(duì)e j b 失去了興趣 對(duì)象關(guān)系映射 簡(jiǎn)稱o r m 是隨著面向?qū)ο蟮能浖_(kāi)發(fā)方法發(fā)展而產(chǎn)生的 面 向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今企業(yè)級(jí)應(yīng)用開(kāi)發(fā)環(huán)境中的主流開(kāi)發(fā)方法 關(guān)系數(shù)據(jù)庫(kù)是企業(yè)級(jí) 應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng) 對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn) 形式 業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象 在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù) 內(nèi)存中的對(duì)象之間 存在關(guān)聯(lián)和繼承關(guān)系 而在數(shù)據(jù)庫(kù)中 關(guān)系數(shù)據(jù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系 因此 對(duì)象 關(guān)系映射 o r m 系統(tǒng)一般以中間件的形式存在 主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù) 據(jù)庫(kù)數(shù)據(jù)的映射 簡(jiǎn)單的說(shuō) o r m 是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù) 將i a v a 程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中 o r m 方式隱藏了數(shù)據(jù)訪問(wèn)的細(xì)節(jié) 將對(duì)關(guān)系數(shù)據(jù)庫(kù)的操作封裝為對(duì)實(shí)體對(duì)象的操 作 軟件開(kāi)發(fā)人員無(wú)須掌握s q l 就可以實(shí)現(xiàn)數(shù)據(jù)持久化 o r m 思想一經(jīng)提出 立刻受 到軟件開(kāi)發(fā)人員的歡迎 并且產(chǎn)生了很多優(yōu)秀的持久層框架 如h i b e m a t e i b a t i s 等 j d o 是對(duì)象持久化工作的綜合成果 試圖提供 個(gè)對(duì)象持久化的完全版本 j d o 同 時(shí)繼承于o d m g 對(duì)象數(shù)據(jù)管理小組 標(biāo)準(zhǔn)化對(duì)象數(shù)據(jù)庫(kù)的一個(gè)獨(dú)立委員會(huì) 和對(duì)象 關(guān)系映射工具提供商 早在1 9 9 9 年 一些經(jīng)常編寫數(shù)據(jù)庫(kù)映射層的富有經(jīng)驗(yàn)的開(kāi)發(fā)人 3 第一章緒論 員就提出了j d o 大綱 他們?cè)陂L(zhǎng)期的面向?qū)ο蟮拈_(kāi)發(fā)中進(jìn)行了大量的數(shù)據(jù)庫(kù)方面的處 理和對(duì)象化包裝 終于 多種多樣的包裝方式引起了很多兼容性方面的問(wèn)題 于是一些 主要的開(kāi)發(fā)團(tuán)隊(duì)聯(lián)合起來(lái) 以s u n 公司為牽頭 啟動(dòng)了j d o 規(guī)范的制定 如今 雖多 經(jīng)波折 但j d 0 2 0 規(guī)范還是于0 5 年3 月獲得j c p j a v ac o m m u n i t yp r o c e s s j a v a 標(biāo)準(zhǔn) 制定組織 執(zhí)行委員會(huì)的通過(guò) 目前 相關(guān)的j d o 規(guī)范實(shí)現(xiàn)的產(chǎn)品己出現(xiàn)了十余種 其中 又以諸如k d o o l i d o d j o g e n i e 等產(chǎn)品相對(duì)比較成熟 可以考慮投入開(kāi)發(fā)使用 但j d o 畢竟還是一項(xiàng)新技術(shù) 從概念上到實(shí)際應(yīng)用上對(duì)其掌握的用戶還不多 而這些產(chǎn)品在配置 使用上的方便性 易用性還有待大幅度改進(jìn) 因此 真正用j d o 來(lái)開(kāi)發(fā)項(xiàng)目的用戶和系統(tǒng)還廖廖無(wú)幾 通過(guò)上述分析 適合構(gòu)建持久層的數(shù)據(jù)持久化方式就剩下j d b c 和o r m 兩種方式 事實(shí)上 這兩種方式也是當(dāng)前系統(tǒng)開(kāi)發(fā)中最常使用的數(shù)據(jù)持久化方式 1 3 論文研究主要內(nèi)容 首先分析了當(dāng)前國(guó)內(nèi)外所使用的j a v a 數(shù)據(jù)持久化技術(shù)的優(yōu)缺點(diǎn) 將數(shù)據(jù)持久層的設(shè) 計(jì)鎖定在j d b c 直接訪問(wèn)數(shù)據(jù)和o r m 映射兩種方式上 提出一個(gè)基于j d b c 的粗粒度 持久層組件 該組件抽象了數(shù)據(jù)庫(kù)操作的通用流程 在提供常用操作的基礎(chǔ)上支持存儲(chǔ) 過(guò)程調(diào)用和事務(wù)處理機(jī)制 可擴(kuò)展幾乎可應(yīng)對(duì)對(duì)數(shù)據(jù)庫(kù)的所有操作需求 功能完善 可 單獨(dú)使用也可結(jié)合d a o 模式設(shè)計(jì)面向?qū)ο蟮某志脤?使用該組件完成本科生畢業(yè)設(shè)計(jì)管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 證實(shí)其具有可用性 操作簡(jiǎn)潔性及可重用性 結(jié)合j 2 e e 的核心模式d a o 對(duì)畢設(shè)管理系統(tǒng)的持久層設(shè)計(jì)進(jìn) 行改進(jìn) d a o 將數(shù)據(jù)對(duì)象和操作過(guò)程封裝為對(duì)象 僅向業(yè)務(wù)邏輯層提供接口 簡(jiǎn)化了 業(yè)務(wù)邏輯的開(kāi)發(fā) 增強(qiáng)了代碼的可維護(hù)性 在軟硬件相同的條件下 使用j m e t e r 對(duì)比其 與h i b e r n a t e 的執(zhí)行效率 通過(guò)在不同的負(fù)載情況下執(zhí)行測(cè)試計(jì)劃 證實(shí)該組件具有較 高的使用價(jià)值 4 長(zhǎng)安大學(xué)碩士學(xué)位論文 2 1 持久層的產(chǎn)生及作用 第二章持久層概述 在采用面向?qū)ο蟮姆椒ㄟM(jìn)行應(yīng)用系統(tǒng)設(shè)計(jì)時(shí) 需要把業(yè)務(wù)領(lǐng)域的需求映射為域模型 d o m a i nm o d e l 域模型通常以類圖為主 類圖中一些對(duì)象的狀態(tài)需要長(zhǎng)時(shí)間保存 在 j a v ae e 框架中 把這些對(duì)象設(shè)計(jì)為實(shí)體 e n t i t y 這些對(duì)象的狀態(tài)最終要存儲(chǔ)到數(shù)據(jù) 庫(kù)中 對(duì)實(shí)體狀態(tài)進(jìn)行的改動(dòng)也要反映到數(shù)據(jù)庫(kù)中 實(shí)體在面向?qū)ο笏枷胫斜环Q為對(duì)象 它具有名稱 屬性 行為等特征 同時(shí)與其他 對(duì)象之間有著關(guān)聯(lián) 依賴 繼承 多態(tài)等復(fù)雜的聯(lián)系 而目前主流的數(shù)據(jù)庫(kù)系統(tǒng)都是關(guān) 系型的 關(guān)系數(shù)據(jù)庫(kù)的構(gòu)成有表 索引 視圖 觸發(fā)器 完整性約束等 其中表在關(guān)系 數(shù)據(jù)庫(kù)中居于核心地位 它體現(xiàn)了關(guān)系數(shù)據(jù)模型并存儲(chǔ)著靜態(tài)數(shù)據(jù) 表中的行代表一條 記錄 列表示記錄中所包含的字段 數(shù)據(jù)庫(kù)應(yīng)用的開(kāi)發(fā)人員發(fā)現(xiàn)他們正面臨著一種阻抗 不匹配的局面 1 8 1 在對(duì)象和關(guān)系之間的繼承關(guān)系斷開(kāi)了 持久層框架產(chǎn)生之前 數(shù)據(jù)持久化通過(guò)直接調(diào)用j d b c 實(shí)現(xiàn) 使用j d b c 執(zhí)行數(shù)據(jù) 庫(kù)操作 每次都必須打開(kāi)連接 聲明數(shù)據(jù)庫(kù)服務(wù)器地址 數(shù)據(jù)庫(kù)名稱及登錄用戶名和密 碼 操作執(zhí)行完閉關(guān)連接 大量的重復(fù)代碼充斥在文件中 每次執(zhí)行操作前的申請(qǐng)連接 會(huì)降低執(zhí)行效率 編寫業(yè)務(wù)邏輯的程序員必須非常了解數(shù)據(jù)庫(kù)表設(shè)計(jì) 明確各個(gè)字段在 數(shù)據(jù)表中排列的順序 使得業(yè)務(wù)邏輯與底層數(shù)據(jù)庫(kù)耦合度相當(dāng)高 一旦數(shù)據(jù)庫(kù)發(fā)生變化 業(yè)務(wù)邏輯必須跟著改變 通常數(shù)據(jù)庫(kù)的設(shè)計(jì)不可能一次完成 隨著項(xiàng)目開(kāi)發(fā)的深入 對(duì)數(shù)據(jù)庫(kù)表做小的修改 如增加字段等 都會(huì)引起業(yè)務(wù)邏輯的更改 換句話說(shuō) 只要d b a 數(shù)據(jù)庫(kù)工程師 不 確定數(shù)據(jù)庫(kù)版本 業(yè)務(wù)邏輯就不能停止修改 于是 在經(jīng)歷了反復(fù)修改的過(guò)程后 在業(yè) 務(wù)邏輯和數(shù)據(jù)庫(kù)層之間插入一層 解耦創(chuàng)3 的思想提出了 在邏輯層和數(shù)據(jù)底層之間加入功能相對(duì)獨(dú)立的持久層 通過(guò)良好的設(shè)計(jì)將邏輯結(jié)構(gòu) 業(yè)務(wù)邏輯 與物理結(jié)構(gòu) 系統(tǒng)底層 如數(shù)據(jù)庫(kù) 相分離 將對(duì)象映射到某種持久機(jī)制 中 并且對(duì)關(guān)系數(shù)據(jù)庫(kù)的輕微改動(dòng)不會(huì)影響面向?qū)ο蟮膽?yīng)用 這種開(kāi)發(fā)模式對(duì)于大規(guī)模 面向?qū)ο蟮纳虡I(yè)信息系統(tǒng)的開(kāi)發(fā)非常適用 一個(gè)成熟的持久層框架應(yīng)該滿足以下幾點(diǎn)要求 1 減少乏味的代碼 5 第二章持久層概述 持久層框架封裝了數(shù)據(jù)庫(kù)持久層的大多數(shù)技術(shù)細(xì)節(jié) 如事務(wù)管理 數(shù)據(jù)庫(kù)連接管理 s q l 生成等 得益于這些成熟優(yōu)秀的底層實(shí)現(xiàn) 程序員可以從j d b c 編碼的煉獄中解脫 從而將精力和創(chuàng)造力投入到業(yè)務(wù)層設(shè)計(jì)等更有價(jià)值的工作中去 2 更加面向?qū)ο蟮脑O(shè)計(jì) 目前的持久層框架 大多數(shù)都已經(jīng)建立在面向?qū)ο蟮脑O(shè)計(jì)思想之上 o r m o b j e c t r a t i o nm a p p i n g 對(duì)象關(guān)系映射 幾乎是目前主流持久層框架的基本特征 o r m 為系統(tǒng)設(shè)計(jì)提供了更加自然的實(shí)現(xiàn)方式 可以通過(guò)o r m 將系統(tǒng)中的d o m m n o b j e c t 自動(dòng)映射到各個(gè)數(shù)據(jù)庫(kù)表 從而編碼中只需要關(guān)系o b j e c t 的相關(guān)屬性 而無(wú)需再 糾纏于j d b cr e s u l t s e t 中毫無(wú)意義的字段型數(shù)據(jù) 3 更好的性能 持久層框架大多提供了優(yōu)秀的性能優(yōu)化機(jī)制 如內(nèi)置的數(shù)據(jù)庫(kù)連接池支持 p r e p a r e d s t a t e m e n t 緩存 數(shù)據(jù)緩存等 這些優(yōu)化機(jī)制的綜合使用大大提升了系統(tǒng)性能 更重要的是 由于設(shè)計(jì)上更加全面的考量 這些持久層框架往往有著超豪華的設(shè)計(jì)團(tuán) 隊(duì) 這些機(jī)制對(duì)于上層構(gòu)架完全透明 使程序員無(wú)需關(guān)心其中負(fù)責(zé)的實(shí)現(xiàn)細(xì)節(jié)即可享 受其所帶來(lái)的性能提升 4 更好的移植性 基于j a v a 的跨平臺(tái)特性 使用j a v a 開(kāi)發(fā)的系統(tǒng)可以在不同操作系統(tǒng)之間切換 但 由于數(shù)據(jù)庫(kù)之間的差異 系統(tǒng)在數(shù)據(jù)庫(kù)平臺(tái)之間的遷移卻遇到了阻力 上面提及的成熟 的持久層框架 由于設(shè)計(jì)上的良好隔離 從而提供了對(duì)不同數(shù)據(jù)庫(kù)的良好支持 只需簡(jiǎn) 單的修改其配置參數(shù) 即可實(shí)現(xiàn)底層數(shù)據(jù)庫(kù)的切換 前提是系統(tǒng)無(wú)需使用特定數(shù)據(jù)庫(kù)的 獨(dú)有特性 2 2 持久層的框架 持久層框架是一組軟件服務(wù) 將應(yīng)用程序與該程序所使用和操縱的數(shù)據(jù)源分離 持 久層框架位于數(shù)據(jù)源之上 提供訪問(wèn)數(shù)據(jù)源的應(yīng)用程序接口 目前的持久層框架 大多 數(shù)都已經(jīng)建立在面向?qū)ο蟮脑O(shè)計(jì)思想之上 對(duì)象關(guān)系映射 4 1 在對(duì)象模型與關(guān)系模型建 以及支持這兩種模型的底層機(jī)制之間進(jìn)行轉(zhuǎn)換 6 長(zhǎng)安大學(xué)碩士學(xué)位論文 2 2 1 持久層框架的設(shè)計(jì)模式 數(shù)據(jù)持久層框架使用d a t aa c c e s so b e j c t d a o 與v a l u eo b j e c t v o 模式 完全抽 象了訪問(wèn)數(shù)據(jù)方法的細(xì)節(jié) 嚴(yán)格區(qū)分表示 業(yè)務(wù)與數(shù)據(jù)層 v o 模式封裝從數(shù)據(jù)庫(kù)讀取 和發(fā)送到數(shù)據(jù)庫(kù)的數(shù)據(jù) 向業(yè)務(wù)應(yīng)用程序開(kāi)發(fā)人員隱藏物理表格結(jié)構(gòu) 抽象數(shù)據(jù)庫(kù)中的 數(shù)據(jù)關(guān)系 d a o 模式封裝了與數(shù)據(jù)庫(kù)交互的j d b c 并通過(guò)v o 模式與業(yè)務(wù)層通信 圖 2 1 演示了持久層框架在系統(tǒng)結(jié)構(gòu)中的地位 圖2 1 持久層框架在系統(tǒng)結(jié)構(gòu)中的地位 通過(guò)上圖可見(jiàn) v o 不僅可以向下面的數(shù)據(jù)訪問(wèn)層傳遞 還可以向上傳遞到表示層 向?yàn)g覽器端顯示信息 d a o 模式有兩個(gè)作用 1 d a o 模式完全抽象用戶請(qǐng)求的數(shù)據(jù)源 d a o 模式的用戶不知道數(shù)據(jù)來(lái)自 o r a c l e m ss q ls e r v e r l d a p 服務(wù)器還是其他的w e b 服務(wù) 數(shù)據(jù)源時(shí)完全 透明的 2 d a o 模式抽象通常與訪問(wèn)數(shù)據(jù)源相關(guān)聯(lián)的c r u d c r e a t e r e p l a c e u p d a t e 與d e l e t e 邏輯 由于用戶不知道如何查詢和讀取數(shù)據(jù) 因此改變數(shù)據(jù)訪問(wèn) 代碼時(shí) 如d a o 中發(fā)出的s q l 語(yǔ)句 不受影響 d a o 模式甚至允許應(yīng)用程 序從多個(gè)數(shù)據(jù)源讀取數(shù)據(jù) 用一個(gè)邏輯對(duì)象向用戶顯示 一個(gè)典型的d a o 實(shí)現(xiàn)包含下列幾個(gè)組件 d a o 工廠類 d a o 接口 d a o 接口實(shí) 現(xiàn)類和值對(duì)象 7 第二章持久層概述 2 2 2o r m 系統(tǒng)的參考模型 o r m 系統(tǒng)的參考模型如圖2 2 所示 在該系統(tǒng)中有一個(gè)映射信息庫(kù) 其中存放了對(duì) 象與數(shù)據(jù)庫(kù)表的映射信息 當(dāng)業(yè)務(wù)領(lǐng)域類需要持久化時(shí) 持久層就會(huì)參照映射信息庫(kù) 從數(shù)據(jù)庫(kù)中讀出該類對(duì)應(yīng)的表 執(zhí)行相應(yīng)的s q l 代碼 如果是查詢操作 那么將參照映 射信息庫(kù)把查詢結(jié)果集轉(zhuǎn)換成對(duì)象 業(yè)務(wù)領(lǐng)域類與持久層之間傳遞對(duì)象 持久層向關(guān)系 數(shù)據(jù)庫(kù)傳遞s q l 語(yǔ)句 關(guān)系數(shù)據(jù)庫(kù)向持久層傳遞數(shù)據(jù)記錄 這樣業(yè)務(wù)領(lǐng)域類在存取對(duì) 象時(shí) 如同在對(duì)象數(shù)據(jù)庫(kù)中存取一樣 圖2 2o r m 系統(tǒng)的參考模型 這種方法的好處是應(yīng)用程序開(kāi)發(fā)者不需要了解數(shù)據(jù)庫(kù)模式 事實(shí)上 他們甚至不需 要知道對(duì)象是保存在關(guān)系數(shù)據(jù)庫(kù)中 另一方面 當(dāng)數(shù)據(jù)庫(kù)模式發(fā)生改變時(shí) 它并不影響 面向?qū)ο蟠a 因?yàn)槌志脤訒?huì)自動(dòng)跟蹤這種改動(dòng) 通過(guò)修改映射信息庫(kù)中的對(duì)應(yīng)關(guān)系 缺點(diǎn)是對(duì)應(yīng)用程序有些性能上的影響 但可以通過(guò)采取如緩存 延遲加載等相應(yīng)技術(shù)減 少這方面的影響 2 3 2 對(duì)象到關(guān)系數(shù)據(jù)庫(kù)的映射機(jī)制 1 屬性映射成列 類屬性通常映射成數(shù)據(jù)庫(kù)中的零或者多個(gè)列 但是并不是每一個(gè)類屬性都需要持久 化 例如 s t u d e n t 學(xué)生 類有一個(gè)t o t a l s c o r e 總分 屬性 該屬性可由各s c o r e 單科分?jǐn)?shù) 屬性 計(jì)算得到 它并不需要保存到數(shù)據(jù)庫(kù)中 因此無(wú)需對(duì)它進(jìn)行映射 將屬性映射成列時(shí) 最常見(jiàn)的情況是將一個(gè)類屬性映射為數(shù)據(jù)庫(kù)表中的一列 當(dāng)類 屬性和數(shù)據(jù)表列的類型都是簡(jiǎn)單類型時(shí) 如日期類型或者字符串類型 那么直接進(jìn)行一 對(duì)一映射即可 但是當(dāng)需要映射的類屬性的類型不是簡(jiǎn)單類型或者是關(guān)系數(shù)據(jù)庫(kù)所不支 持的類型時(shí) 就不能通過(guò)這種映射方式來(lái)進(jìn)行 例如 關(guān)系數(shù)據(jù)庫(kù)一般不支持j a v a 中的 b o o l e a n 類型 這時(shí)就需要將它映射成數(shù)據(jù)庫(kù)中的字符類型或者數(shù)值類型 另外 如果 數(shù)據(jù)庫(kù)字段的粒度比對(duì)象的屬性更細(xì) 通常就需要將對(duì)象的屬性映射到多個(gè)表字段 比 如c o u p e 類有一個(gè)t e a c h e r 類對(duì)象作為屬性 這個(gè)時(shí)候t e a c h e r 就需要映射成為數(shù)據(jù)庫(kù) 8 長(zhǎng)安大學(xué)碩士學(xué)位論文 中的幾列 在有的情況下也需要將多個(gè)屬性映射成表中的單一列 例如 代表美國(guó)郵政 區(qū)號(hào)的類可以有3 個(gè)數(shù)字屬性每一個(gè)都代表郵政編碼中的某一部分 而郵政編碼可以在 數(shù)據(jù)庫(kù)中以單一的列來(lái)進(jìn)行存儲(chǔ) 2 屬性類型映射成域 關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)類型有限 遠(yuǎn)少于高級(jí)語(yǔ)言的數(shù)據(jù)類型 難以表現(xiàn)高級(jí)語(yǔ)言中豐 富的數(shù)據(jù)類型和自定義類型 給數(shù)據(jù)接口程序的編寫帶來(lái)很大的麻煩 為解決這一矛盾 在實(shí)現(xiàn)對(duì)象關(guān)系映射時(shí) 需要在對(duì)象模型中的類型與關(guān)系模型中的類型之間進(jìn)行轉(zhuǎn)換 3 映射繼承到關(guān)系數(shù)據(jù)庫(kù)中 在關(guān)系數(shù)據(jù)庫(kù)中實(shí)現(xiàn)繼承的策略取決于類到表的映射策略 類到表的映射 除了非 常簡(jiǎn)單的應(yīng)用外 通常不會(huì)有類到表的一對(duì)一映射 將類之間的繼承關(guān)系映射到關(guān)系數(shù) 據(jù)庫(kù)中有3 種基本策略 整個(gè)類層次映射為一張表 該策略把一個(gè)完整類層次繼承結(jié)構(gòu)映射成一個(gè)數(shù)據(jù)庫(kù)表 而層次結(jié)構(gòu)中的所有類的 所有屬性都存儲(chǔ)在這張表中 采用這種策略的優(yōu)點(diǎn)是性能好 可以很容易的實(shí)現(xiàn) 在數(shù) 據(jù)庫(kù)中提供了最佳的空間占用 沒(méi)有任何冗余屬性 缺點(diǎn)是對(duì)象與數(shù)據(jù)庫(kù)之間的耦合程 度比較高 在類層次中增加或者刪除一個(gè)屬性時(shí) 就必須對(duì)數(shù)據(jù)庫(kù)表做相應(yīng)改動(dòng) 每個(gè)具體的類映射為一張表 在該策略中 每一個(gè)具體的類映射到一張表 并將該類的父類的屬性加入到同一張 表中 抽象類不需要映射到表 其優(yōu)點(diǎn)是一次數(shù)據(jù)庫(kù)操作就可以完成一個(gè)對(duì)象的讀取 該策略的缺點(diǎn)是類與數(shù)據(jù)庫(kù)的耦合程度比較高 增加或刪除父類的屬性會(huì)導(dǎo)致對(duì)所有子 類所映射的表的結(jié)構(gòu)的修改 對(duì)多態(tài)和繼承的支持不夠好 數(shù)據(jù)庫(kù)中的冗余字段比較多 9 每個(gè)類映射為一張表 在該映射方式中 不管是具體類還是抽象類 每個(gè)類都將映射到一張表 采用這種 策略 必須在存放父類實(shí)例的表和存放子類實(shí)例的表之間建立具有唯一性的外鍵約束關(guān) 系 在每個(gè)表中插入一個(gè)識(shí)別d 將子類所在表的記錄和父類所在表的記錄關(guān)聯(lián)起來(lái) 這種策略的優(yōu)點(diǎn)是類與數(shù)據(jù)庫(kù)之間的耦合程度比較低 類屬性的變動(dòng)引起的表結(jié)構(gòu)的變 動(dòng)很小 在關(guān)系數(shù)據(jù)庫(kù)中最大程度的實(shí)現(xiàn)了對(duì)多態(tài)的支持 空間節(jié)約性好 唯一的冗余 就是增加了額外的識(shí)別d 來(lái)連接不同的繼承層次 映射比較直接 容易理解 維護(hù)成 本低 該策略的主要缺點(diǎn)是性能比較差 訪問(wèn)類的實(shí)例時(shí) 需要跨表關(guān)聯(lián) 可能導(dǎo)致頻 9 第二章持久層概述 繁訪問(wèn)父類所對(duì)應(yīng)的表 4 映射關(guān)系到關(guān)系數(shù)據(jù)庫(kù)中 數(shù)據(jù)庫(kù)中不應(yīng)該只保存持久對(duì)象 還應(yīng)該保存持久對(duì)象之間的關(guān)系 對(duì)象之間的關(guān) 系除了繼承 還有關(guān)聯(lián) 聚集和組成 它們之間的區(qū)別在于對(duì)象之間的綁定程度 對(duì)象 間的關(guān)系可以分為一對(duì)一關(guān)系 一對(duì)多關(guān)系 多對(duì)多關(guān)系 對(duì)于不同類型的關(guān)系 采用 的映射策略不同 要實(shí)現(xiàn)一對(duì)一和一對(duì)多關(guān)系 只需要將一張表的鍵包含在另一張表中 即可 要實(shí)現(xiàn)多對(duì)多的關(guān)系 需要關(guān)聯(lián)表的概念 它是一種數(shù)據(jù)實(shí)體 唯一的目標(biāo)就是 在關(guān)系數(shù)據(jù)庫(kù)中維護(hù)兩個(gè)或者多個(gè)表的關(guān)聯(lián) 一對(duì)一關(guān)系 這種關(guān)系可以通過(guò)外鍵方式實(shí)現(xiàn) 在任意一個(gè)類所對(duì)應(yīng)的表中加入另一方所對(duì)應(yīng)的 表的主鍵作為外鍵 多一對(duì)多關(guān)系 同樣是通過(guò)外鍵方式來(lái)實(shí)現(xiàn) 在 多 的一方所對(duì)應(yīng)的表中加入 一 的一方所對(duì) 應(yīng)的表的主鍵作為外鍵 爹多對(duì)多關(guān)系 在多對(duì)多關(guān)系的映射中 需要額外創(chuàng)建一張關(guān)聯(lián)表 在關(guān)聯(lián)表中存放兩個(gè)關(guān)聯(lián)的表 的主鍵作為屬性 而關(guān)聯(lián)表的主鍵一般是這兩個(gè)表的主鍵的組合 h i b e r n a t e 是一個(gè)輕量級(jí)的對(duì)象持久化框架 h i b e r n a t e 不僅提供類到數(shù)據(jù)庫(kù)模式的 映射 并且提供了一種數(shù)據(jù)查詢語(yǔ)言h q l h i b e r n a t eq u e r yl a n g u a g e 這種語(yǔ)言非常 類似s q l 查詢語(yǔ)言 所不同的是它將表?yè)Q成了對(duì)象 字段換成了屬性 表之間的關(guān)聯(lián) 轉(zhuǎn)換成了對(duì)象之間的關(guān)系 h i b e r n a t e 已發(fā)展得相當(dāng)成熟 被廣泛的用于系統(tǒng)開(kāi)發(fā)中 2 3 本章小結(jié) 持久層是從業(yè)務(wù)邏輯層中獨(dú)立出的 專門處理數(shù)據(jù)持久化的邏輯層面 其簡(jiǎn)化了數(shù) 據(jù)庫(kù)操作 提升了編碼重用率 持久層框架結(jié)合d a o 模式與v o 模式 通過(guò)向業(yè)務(wù)邏 輯層提供接口隱藏了物理表結(jié)構(gòu) 抽象了數(shù)據(jù)關(guān)系 o r m 方式在結(jié)合d a o 模式與v o 模式的基礎(chǔ)上 增加x m l 文件描述對(duì)象 關(guān)系映 射細(xì)節(jié) 完成對(duì)象模型和關(guān)系模型的匹配 h i b e r n a t e 是最成功的o r m 框架 在當(dāng)前持 久層的開(kāi)發(fā)中被廣泛使用 1 0 長(zhǎng)安大學(xué)碩士學(xué)位論文 第三章基于組件的持久層設(shè)計(jì)與實(shí)現(xiàn) 本章介紹了一個(gè)粗粒度持久層組件 該組件封裝了j d b c 連接數(shù)據(jù)庫(kù) 對(duì)數(shù)據(jù)庫(kù)的 增 刪 改 查操作 支持事務(wù)并能夠調(diào)用存儲(chǔ)過(guò)程 將該組件用于本科生畢業(yè)設(shè)計(jì)管 理信息系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)中 證實(shí)其便于移植 使用方便 3 1j d b c 概述 j d b c 是j a v ad a t a b a s ec o n n e c t i v i t y j a v a 數(shù)據(jù)庫(kù)連接 的縮寫 是一種用于執(zhí)行 s q l 語(yǔ)句的j a v aa p i 它由一組用j a v a 編寫的類和接口組成 j d b c 實(shí)現(xiàn)了向各種關(guān)系 數(shù)據(jù)庫(kù)發(fā)送s q l 語(yǔ)句的功能 其與j a v a 一樣具有跨平臺(tái)運(yùn)行的特點(diǎn) j d b c 的結(jié)構(gòu)見(jiàn) 圖3 1 j d b c 是一個(gè)細(xì)粒度組件提供 低級(jí) 接口 它用于直接調(diào)用s q l 命令 在這方面 它的功能極佳 并且比其他的數(shù)據(jù)庫(kù)連接a p i 易于使用 但同時(shí)它也被設(shè)計(jì)為一種基礎(chǔ) 接口 在它之上可以建立高級(jí)接口和工具 表3 1 列出了j d b c 的幾個(gè)主要接e l 5 1 表3 1j d b c 的主要接口 a p i說(shuō)明 j a v a s q l c o n n e c t i o n 提供動(dòng)態(tài)創(chuàng)建和訪問(wèn)j a v a 數(shù)組的靜態(tài)方法 能夠通過(guò) g e t m e t a d a t a 方法獲得數(shù)據(jù)庫(kù)提供的信息 所支持的s q l 語(yǔ) 法 存儲(chǔ)過(guò)程和此連接的功能等信息 j a v a s q l d r i v e r每個(gè)驅(qū)動(dòng)程序類必須實(shí)現(xiàn)的接口 同時(shí) 每個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程 序都應(yīng)該提供一個(gè)實(shí)現(xiàn)d r i v e r 接口的類 j a v a s q l d r i v e r m a n a g e r 管理一組j d b c 驅(qū)動(dòng)程序的基本服務(wù) 作為初始化的一部分 此接1 2 1 會(huì)嘗試加載在 j d b c d r i v e r s 系統(tǒng)屬性中引用的驅(qū)動(dòng) 程序類 j a v a s q l p r e p a r e s t a t e m e n t繼承s t a t e m e n t 接e l 表示預(yù)編譯的s q l 語(yǔ)句的對(duì)象 s q l 語(yǔ)句被預(yù)編譯并且存儲(chǔ)在p r e p a r e s t a t e m e n t 對(duì)象中 然后可 以使此對(duì)象高效的多次執(zhí)行該語(yǔ)句 j a v a s q l r e s u l t s e t 一般指查詢返回的數(shù)據(jù)庫(kù)結(jié)果集 j a v a s q l r e s u l t s e t m e t a d a t a 可用于獲取關(guān)于r e s u l t s e t 對(duì)象中列的類型和屬性信息的對(duì) 象 j a v a s q l s t a t e m e n t 用于執(zhí)行靜態(tài)s q l 語(yǔ)句并返回其所生成的結(jié)果的對(duì)象 第三章基于組件的持久層設(shè)計(jì)與實(shí)現(xiàn) 應(yīng)用程序應(yīng)用程序應(yīng)用程序 之鄉(xiāng)凸之多 j d b ca p i j d b cd r i v e r m a n a g e r 數(shù)據(jù)庫(kù)驅(qū)動(dòng) 圖3 1 使用j i b c 連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)業(yè)務(wù)邏輯結(jié)構(gòu)圖 3 1 1j d b c 的主要接口介紹 1 c o n n e c t i o n 接口 c o n n e c t i o n 對(duì)象代表與數(shù)據(jù)庫(kù)的連接 連接過(guò)程包括所執(zhí)行的s q l 語(yǔ)句和該連接返 回的結(jié)果 一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫(kù)有一個(gè)或者多個(gè)連接 也可與多個(gè)數(shù)據(jù)庫(kù)有連 接 打開(kāi)連接與數(shù)據(jù)庫(kù)建立連接的標(biāo)準(zhǔn)方法是調(diào)用d r i v e r m a n a g e r g e t c o n n e c t i o n 方法 該方法接受含有某個(gè)u r l 的字符串 d r i v e r m a n a g e r 類 即所謂的j d b c 管理層 將嘗 試找到可與那個(gè)u r l 所代表的數(shù)據(jù)庫(kù)進(jìn)行連接的驅(qū)動(dòng)程序 d r i v e r m a n a g e r 類存有已注 冊(cè)的d r i v e r 類的清單 當(dāng)調(diào)用方法g e t c o r m e c t i o n 時(shí) 它檢查清單中的每個(gè)驅(qū)動(dòng)程序 直到找到可與u r l 中指定的數(shù)據(jù)庫(kù)進(jìn)行連接的驅(qū)動(dòng)程序?yàn)橹?d r i v e r 的方法c o n n e c t 使 用這個(gè)u r l 來(lái)建立實(shí)際的連接 用戶可以通過(guò)以下代碼顯示如何打開(kāi)一個(gè)與位于u r l j d b c o d b c w o m b a t 的數(shù)據(jù) 庫(kù)連接 訪問(wèn)數(shù)據(jù)庫(kù)用戶標(biāo)識(shí)為 s a 口令為 s a ls t r i n gu r l j d b c o d b c w o m b a t i l 竺 竺 型竺翌 里三里堡蘭 竺竺皇壁墾曼 堡竺竺 旦 竺 墮 蔓l 2 s t a t e m e n t 接口 s t a t e m e n t 對(duì)象用于將s q l 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中 實(shí)際上有三種s t a t e m e n t 對(duì)象 它 們都作為在給定連接上執(zhí)行s q l 語(yǔ)句的包容器 s t a t e m e n t p r e p a r e d s t a t e m e n t 繼承了 s t a t e m e n t 和c a l l a b l e s t a t e m e n t 繼承了p r e p a r e d s t a t e m e n t 它們都專用于特定類型 的s q l 語(yǔ)句 s t a t e m e n t 對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單s q l 語(yǔ)句 p r e p a r e d s t a t e m e n t 對(duì) 象用于執(zhí)行帶或不帶i n 參數(shù)的預(yù)編譯s q l 語(yǔ)句 c a l l a b l e s t a t e m e n t 對(duì)象用于執(zhí)行對(duì)數(shù) 1 2 長(zhǎng)安大學(xué)碩士學(xué)位論文 據(jù)庫(kù)存儲(chǔ)過(guò)程的調(diào)用 s t a t e m e n t 接口提供了執(zhí)行語(yǔ)句和獲取結(jié)果的基本方法 p r e p a r e d s t a t e m e n t 接1 3 添加了處理n 參數(shù)的方法 而c a l l a b l e s t a t e m e n t 添加了處理o u t 參數(shù)的方法 以下的語(yǔ)句顯示了s t a t e m e n t 對(duì)象從創(chuàng)建到銷毀的全過(guò)程 s t a t e m e n ts t r u t c o n c r e a t e s t a t e m e n t 岔j 建s t a t e m e n t 對(duì)象 l r e s u l t s e tr s s t m t e x c u t e q u e r y s e l e c t f r o mt e s t s q l 語(yǔ)句被作為參數(shù)提供給e x c u t e q u e r yi 查鯊 1 3 p r e p a r e s t a t e m e n t 接1 3 p r e p a r e s t a t e m e n t 接1 3 繼承了s t a t e m e n t 但與之略有不同 概括為如下兩方面 p r e p a r e s t a t e m e n t 實(shí)例包含已編譯的s q l 語(yǔ)句 這就是使語(yǔ)句 準(zhǔn)備好 包含 于f r e p a r e s a t e m e n t 對(duì)象中的s q l 語(yǔ)句可具有一個(gè)或多個(gè)礬參數(shù) 斟參數(shù)的值 在s q l 語(yǔ)句創(chuàng)建時(shí)未被指定 相反的 該語(yǔ)句為每個(gè) 參數(shù)保留一個(gè)問(wèn)號(hào) 作為占位符 每個(gè)問(wèn)號(hào)的值必須在該語(yǔ)句執(zhí)行之前通過(guò)適當(dāng)?shù)膕 e t x x x 0 方法來(lái)提供 由于p r e p a r e s t a t e m e n t 對(duì)象已經(jīng)預(yù)編譯過(guò) 所以其執(zhí)行速度要快于 s t a t e m e n t 對(duì)象 因此 多次執(zhí)行s q l 語(yǔ)句經(jīng)常創(chuàng)建為p r e p a r e s t a t e m e n t 對(duì)象 以提高效率 多作為s t a t e m e n t 的子類 p r e p a r e s t a t e m e n t 繼承了s t a t e m e n t 的所有功能 另外它 還添加了一整套方法 用于設(shè)置發(fā)送給數(shù)據(jù)庫(kù)以取代礬參數(shù)占位符的值 同 時(shí) 三種方法e x c u t e e x c u t e q u e r y 和e x c u t e u p d a t e 已被更改已使之不再需要參 數(shù) 以下程序顯示了使用p r e p a r e s t a t e m e n t 接1 3 向數(shù)據(jù)庫(kù)插入1 0 條記錄 該程序執(zhí)行的 效率大大高于使用s t a t e m e n t 接口的執(zhí)行效率 4 r e s u l t s e t 接口 r e s u l t s e t 包含符合s q l 語(yǔ)句中條件的所有行 并且它通過(guò)一套g e t 方法 這些g e t 方法可以訪問(wèn)當(dāng)前行中的不同列 提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn) r e s u l t s e t n e x t 方法用 1 3 第三章基于組件的持久層設(shè)計(jì)與實(shí)現(xiàn) 于移動(dòng)到r e s u l t s e t 中的下一行 使下一行成為當(dāng)前行 結(jié)果集一般是一個(gè)表 其中有查詢所返回的列表器及相應(yīng)的值 例如 如果查詢?yōu)?s e l e c ta b cf r o mt e s t 則結(jié)果集為如下形式 abc 1 2 3 4 5 c u

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論