




已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
J2EE之DAO設(shè)計(jì)模式背景:根據(jù)數(shù)據(jù)源的不同, 訪問(wèn)數(shù)據(jù)的方法也會(huì)有所不同,訪問(wèn)持久化的數(shù)據(jù)源,比如數(shù)據(jù)庫(kù),也會(huì)由于其存儲(chǔ)類(lèi)型的不同(關(guān)系數(shù)據(jù)庫(kù),面向?qū)ο蟮臄?shù)據(jù)庫(kù),簡(jiǎn)單文件 儲(chǔ)存,其他方式)和提供商自定義數(shù)據(jù)類(lèi)型的不同而有很大的區(qū)別。出現(xiàn)的問(wèn)題:許多投入使用的,J2EE WEB 應(yīng)用程序 在一些時(shí)候需要進(jìn)行數(shù)據(jù)的持久化. 對(duì)于很多的WEB應(yīng)用,數(shù)據(jù)的持久化存儲(chǔ)可以通過(guò)不同的機(jī)制來(lái)實(shí)現(xiàn),文檔中清楚的標(biāo)出了這些用于訪 問(wèn)不同數(shù)據(jù)持久機(jī)制的API的不同之處. 還有一些其他的應(yīng)用或許會(huì)訪問(wèn)一些位于特有系統(tǒng)上的數(shù)據(jù)資源.比如,在大型機(jī)的系統(tǒng)之上,也可 能在輕量級(jí)的目錄訪問(wèn)協(xié)議LDAP倉(cāng)庫(kù)中,或者是其他什么系統(tǒng). 還有就是,數(shù)據(jù)也可能是由諸如B2B這樣的外部集成系統(tǒng)服務(wù),信用卡局服務(wù) ,或者其他服務(wù)來(lái)提供的.一般來(lái)說(shuō),程序使用一些共享的分布式組件來(lái)表示持久化數(shù)據(jù).比如實(shí)體BEAN. 當(dāng)一個(gè)程序中實(shí)體BEAN以比較直接 的方式訪問(wèn)持久化數(shù)據(jù)時(shí)大多會(huì)考慮采用BEAN管理持久化方式(BMP)說(shuō)明白點(diǎn),就是程序中的實(shí)體BEAN包含有直接訪問(wèn)持久化數(shù)據(jù)的代碼.另外一 種情況,程序可以采用容器管理持久化,你不需要寫(xiě)任何代碼,而是讓容器自己來(lái)處理數(shù)據(jù)持久化的具體細(xì)節(jié).程序可以使用 JDBC API 來(lái)訪問(wèn)位于關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù). 他使得在諸如關(guān)系型數(shù)據(jù)庫(kù)這樣的持久化載體中,對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)的訪問(wèn)和處理成 為可能. 也使J2EE應(yīng)用程序可以使用SQL語(yǔ)句作為標(biāo)準(zhǔn)的訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)句. 然而,即便是都是關(guān)系型數(shù)據(jù)庫(kù)的環(huán)境下,由于不同 的數(shù)據(jù)庫(kù)產(chǎn)品,也會(huì)導(dǎo)致SQL在使用上,語(yǔ)法和格式也各不相同.對(duì)于不同類(lèi)型的數(shù)據(jù)持久化倉(cāng)庫(kù),差異甚至?xí)? 訪問(wèn)機(jī)制,API, 以及一些其他特性,會(huì)因?yàn)樗麄兪顷P(guān)系型數(shù)據(jù)庫(kù),面向?qū)ο笮蛿?shù)據(jù)庫(kù)還是一般的文件而大相徑庭.需要訪問(wèn)以前遺留下來(lái)的系統(tǒng)或者諸如大型主機(jī) ,B2B這樣的專(zhuān)業(yè)系統(tǒng)中數(shù)據(jù)庫(kù)的應(yīng)用程序,會(huì)經(jīng)常使用到一些自己特有的API. 這些特有的數(shù)據(jù)源對(duì)應(yīng)用程序的編寫(xiě)提出了很大的挑戰(zhàn),而 且很有可能在編寫(xiě)的過(guò)程中造成程序代碼和數(shù)據(jù)訪問(wèn)代碼間產(chǎn)生相互依賴(lài)性.當(dāng)商業(yè)組件諸如:實(shí)體BEAN,會(huì)話(huà)BEAN,以及servlets和JSP幫助對(duì) 象這樣的表示組件需要訪問(wèn)數(shù)據(jù)資源的時(shí)候,可以用標(biāo)準(zhǔn)的API來(lái)實(shí)現(xiàn)其數(shù)據(jù)庫(kù)的連接和數(shù)據(jù)的具體操作.但是,如果把連接數(shù)據(jù)庫(kù)和數(shù)據(jù)的操作 代碼和這些組件寫(xiě)在一起的話(huà),會(huì)導(dǎo)致這些組件和數(shù)據(jù)庫(kù)操作之間的耦合,這種耦合的存在,使得在應(yīng)用程序中從當(dāng)前數(shù)據(jù)源類(lèi)型遷移到另一種 數(shù)據(jù)源類(lèi)型變的十分困難和乏味. 如果數(shù)據(jù)源改變了,那么你的組件也不得不改變來(lái)適應(yīng)新的數(shù)據(jù)源.必要性:1 像bean管理實(shí)體bean, 會(huì)話(huà) bean, servlets, 以及其他一些像jsp幫手對(duì)象這樣的組件,通常需要從持久化的數(shù)據(jù) 庫(kù)或者原先遺留下來(lái)的系統(tǒng)以及 B2B, LDAP這樣的系統(tǒng)中提取或存儲(chǔ)數(shù)據(jù)。2 用于持久化儲(chǔ)存的API因他們的提供商 的不同而各自不同。還有一些的數(shù)據(jù)源也可能有自己的一些特有的API或者是一些非標(biāo)準(zhǔn)的API。眾多類(lèi)型的數(shù)據(jù)持久化系統(tǒng)和載體,比如:關(guān)系型數(shù)據(jù)庫(kù),面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng),XML文檔,簡(jiǎn)單文件等等,使得API各不相同和性能各異。我們?nèi)狈σ环N統(tǒng)一的API來(lái)對(duì)以上的 不同的系統(tǒng)或者文件載體進(jìn)行操作。3 組件通常使用特有的API從內(nèi)部系統(tǒng)或者是遺留下來(lái)的系統(tǒng)來(lái)訪問(wèn)或是提取數(shù)據(jù)。 4 當(dāng)某些特定的訪問(wèn)機(jī)制和API包含在這些組件中的時(shí)候,將直接影響他們的兼容性。5 組件需要對(duì)現(xiàn)有的持久化 儲(chǔ)存系統(tǒng)或者數(shù)據(jù)源的實(shí)現(xiàn)足夠透明,以便在向不同的產(chǎn)品,不同類(lèi)型的儲(chǔ)存系統(tǒng),和不同類(lèi)型數(shù)據(jù)源中進(jìn)行遷移的時(shí)候,變的簡(jiǎn)單。 解決方案使用數(shù)據(jù)訪問(wèn)對(duì)象來(lái)抽象和封裝對(duì)數(shù)據(jù)源的所有訪問(wèn)。數(shù)據(jù)訪問(wèn)對(duì)象負(fù)責(zé)管理與數(shù)據(jù)源的連接,來(lái)獲取和儲(chǔ)存其中的數(shù) 據(jù)。數(shù)據(jù)訪問(wèn)對(duì)象實(shí)現(xiàn)與數(shù)據(jù)源相關(guān)的訪問(wèn)機(jī)制。 數(shù)據(jù)源可以是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),可以是像B2B EXCHANGE這樣的內(nèi) 部服務(wù),可以是LDAP庫(kù),或者也可以是通過(guò)CORBA IIOP 或者是低層sockets來(lái)訪問(wèn)的商業(yè)服務(wù). 依賴(lài)于DAO的商業(yè)組件只對(duì)他 的客戶(hù)端暴露一些非常簡(jiǎn)單的DAO外部接口. DAO將數(shù)據(jù)源的實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶(hù)端完全的隱藏了起來(lái). 因?yàn)?暴露給客戶(hù)端的DAO接口在 低層數(shù)據(jù)源的實(shí)現(xiàn)發(fā)生改變時(shí)并不會(huì)隨著改變,所以這種設(shè)計(jì)模式使得DAO可以適應(yīng)不同的數(shù)據(jù)儲(chǔ)存方式類(lèi)型而不影響客戶(hù)端和商業(yè)組件.最主要 的, DAO還在組件和數(shù)據(jù)源之間扮演著協(xié)調(diào)者的角色.以下是DAO設(shè)計(jì)模式中各個(gè)模塊的解釋?zhuān)?1 BusinessObject指的是數(shù)據(jù)客戶(hù)端,他通常需要去訪問(wèn)數(shù)據(jù)源以獲得數(shù)據(jù)或儲(chǔ)存數(shù)據(jù).一個(gè)BusinessObject除了訪問(wèn)數(shù)據(jù)源的 servlet或者h(yuǎn)elper bean之外也可以是會(huì)話(huà)BEAN,實(shí)體BEAN以及一些其他的JAVA對(duì)象.2 DataAccessObject 是這個(gè)設(shè) 計(jì)模式的核心部分, DataAccessObject為BusinessObject抽象了底層的數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)的細(xì)節(jié),使得訪問(wèn)數(shù)據(jù)變得透 明. BusinessObject還將數(shù)據(jù)的裝載和儲(chǔ)存交給了DataAccessObject進(jìn)行代理.3 DataSource他表示的是數(shù)據(jù)源的實(shí) 現(xiàn). 一個(gè)數(shù)據(jù)源可以四像關(guān)系型數(shù)據(jù)庫(kù)管理體統(tǒng)這樣的數(shù)據(jù)庫(kù),可以是面向?qū)ο笮偷臄?shù)據(jù)庫(kù)管理系統(tǒng),可以是XML文檔,也可以是簡(jiǎn)單文件等 等. 當(dāng)然他也可以是其他的系統(tǒng),(遺留系統(tǒng),大型主機(jī)),可以是服務(wù)(B2B服務(wù),信用卡局服務(wù))或者是像LDAP這樣的數(shù)據(jù)庫(kù) 等.4 TransferObject他代表的是傳遞對(duì)象,一般用于數(shù)據(jù)的載體. DataAccessObject使用傳遞對(duì)象來(lái)將數(shù)據(jù)返回給客戶(hù) 端. DataAccessObject也可以使用傳遞對(duì)象來(lái)從客戶(hù)端接受數(shù)據(jù)來(lái)將原先數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行更新.策略:由于每一個(gè) BusinessObject都有著相應(yīng)的DAO,所以在BusinessObject,DAO,和底層實(shí)現(xiàn)之間是可以建立起確定的關(guān)系的(比如在關(guān)系型數(shù)據(jù)庫(kù)中的表格 )。一旦他們之間的關(guān)系建立了,我們就可以為這個(gè)應(yīng)用使用專(zhuān)門(mén)定制出代碼生成器生成涉及到該應(yīng)用所有的DAO的代碼。產(chǎn)生DAO的元數(shù)據(jù)還 可以通過(guò)開(kāi)發(fā)人員定制的描述符文件來(lái)獲得.代碼生成器也可以通過(guò)自動(dòng)的對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢查,然后按照實(shí)際情況來(lái)提供一些必要的DAO來(lái)訪問(wèn)數(shù) 據(jù)庫(kù). 如果對(duì)于DAO的要求過(guò)于復(fù)雜,則考慮使用第三方工具來(lái)為關(guān)系型數(shù)據(jù)庫(kù)提供對(duì)象到關(guān)系的映射.這些工具一般都包含圖形化的用戶(hù) 界面可以方便的將商業(yè)對(duì)象影射到持久化對(duì)象上,于是就可以定義DAO了。這些工具可以自動(dòng)在影射一結(jié)束就自動(dòng)的產(chǎn)生代碼,不但如此,他門(mén)可 以提供一些附加的好處,比如結(jié)果緩存,查詢(xún)緩存,與應(yīng)用服務(wù)器的整合,于第三方產(chǎn)品的整和(分布試緩存)等等.1 工廠模式策 略:DAO設(shè)計(jì)模式可以通過(guò)采用抽象工廠和工廠方法模式來(lái)邊的非常的靈活.當(dāng)?shù)讓訑?shù)據(jù)儲(chǔ)存實(shí)現(xiàn)不需要發(fā)生改變時(shí),該策略可以使 用工廠方法設(shè)計(jì)模式實(shí)現(xiàn),來(lái)產(chǎn)生應(yīng)用中所需的DAO.當(dāng)?shù)讓訑?shù)據(jù)儲(chǔ)存實(shí)現(xiàn)不得不發(fā)生變化的時(shí)候, 我們可以用抽象工廠模式來(lái)實(shí) 現(xiàn)這個(gè)策略. 就象在設(shè)計(jì)模式:可重用面向?qū)ο筌浖脑剡@本書(shū)中建議的那樣,抽象工廠先創(chuàng)建然后再使用工廠方法的實(shí)現(xiàn). 在當(dāng) 前情況,該策略可以提供一個(gè)抽象的DAO工廠對(duì)象(抽象工廠),用他來(lái)創(chuàng)建不同類(lèi)型的具體DAO工廠.,每一個(gè)工廠都各自支持一種不同的數(shù)據(jù)持久 化儲(chǔ)存的實(shí)現(xiàn). 一旦你為某個(gè)特定的實(shí)現(xiàn)獲得了具體的DAO工廠,你則可以用這個(gè)工廠來(lái)產(chǎn)生那個(gè)特定實(shí)現(xiàn)所支持和實(shí)現(xiàn)的DAO對(duì) 象.優(yōu)點(diǎn)與缺點(diǎn):DAO設(shè)計(jì)模式帶來(lái)的好處.1 透明化:商業(yè)對(duì)象可以在完全不知道數(shù)據(jù)源如何具體實(shí)現(xiàn)的情況下 來(lái)使用數(shù)據(jù)源. 訪問(wèn)數(shù)據(jù)源是透明的,因?yàn)閷?shí)現(xiàn)細(xì)節(jié)已經(jīng)被隱藏進(jìn)了DAO.2 遷移簡(jiǎn)單化:DAO層的出現(xiàn),使得應(yīng)用程序向 不同的數(shù)據(jù)庫(kù)實(shí)現(xiàn)進(jìn)行遷移變的容易.商業(yè)對(duì)象可以對(duì)底層數(shù)據(jù)實(shí)現(xiàn)一無(wú)所知.這樣,遷移只涉及到了對(duì)DAO層的修改. 另外,如果使用工廠 策略,則使為每一種底層數(shù)據(jù)實(shí)現(xiàn)提供一個(gè)具體的工廠實(shí)現(xiàn)成為可能.在這種情況下,遷移到一種不同的數(shù)據(jù)實(shí)現(xiàn),其實(shí)就相當(dāng)于為這個(gè)應(yīng)用程序 再提供一個(gè)新的工廠實(shí)現(xiàn).3 減少在商業(yè)對(duì)象中的編程難度.由于DAO管理著所有的數(shù)據(jù)訪問(wèn)細(xì)節(jié),因而大大簡(jiǎn)化了在商業(yè)對(duì)象 和其他使用DAO的數(shù)據(jù)客戶(hù)端里的代碼.所有的實(shí)現(xiàn)細(xì)節(jié)相關(guān)的代碼比如(SQL 語(yǔ)句)都包含在DAO而不在商業(yè)對(duì)象中. 這樣使得代碼變 的更加健壯而且大大提高了開(kāi)發(fā)效率.4 將所有的數(shù)據(jù)訪問(wèn)都單獨(dú)集中到一層中去.因?yàn)樗械臄?shù)據(jù)訪問(wèn)操作現(xiàn)在都已經(jīng)被 DAO所代理,所以這個(gè)單獨(dú)的數(shù)據(jù)訪問(wèn)層可以被看作可以是將數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)和其余應(yīng)用程序相互隔離的一層. 這樣的集中,使得應(yīng)用程序可 以更加容易的來(lái)維護(hù)和管理.缺點(diǎn):5 對(duì)容器管理持久化無(wú)用由于EJB容器使用CMP(容器管理持久化)來(lái)管理實(shí)體 BEAN. 容器會(huì)自動(dòng)的為持久化儲(chǔ)存訪問(wèn)提供服務(wù).應(yīng)用程序使用容器管理的實(shí)體BEAN則不需要DAO層的參與.因?yàn)閼?yīng)用程序服務(wù)器本身就可 以透明的提供這些功能.然而,DAO在組合式CMP和BMP需要的場(chǎng)合下還是有用的.6 增加了多余的層.由于DAO在數(shù)據(jù)客戶(hù)端和數(shù) 據(jù)源之外多創(chuàng)建了一層對(duì)象,因而,需要對(duì)他進(jìn)行設(shè)計(jì)和實(shí)現(xiàn),來(lái)均衡這個(gè)設(shè)計(jì)模式的利弊. 但是,一般來(lái)說(shuō),采用此設(shè)計(jì)模式還是利大于弊 的.7 需要對(duì)類(lèi)的相互繼承關(guān)系進(jìn)行設(shè)計(jì).當(dāng)使用工廠策略的時(shí)候,具體工廠類(lèi)的繼承關(guān)系和由這些工廠類(lèi)生成的產(chǎn)品需要進(jìn) 行設(shè)計(jì)和實(shí)現(xiàn). 我們需要仔細(xì)考慮這些多付出的工作是否真的可以產(chǎn)生出來(lái)更高的靈活性. 使用這個(gè)策略會(huì)使設(shè)計(jì)變的更加復(fù)雜,然 而,你可以先從工廠方法模式開(kāi)始來(lái)實(shí)現(xiàn)這個(gè)策略,然后在需要的情況下再轉(zhuǎn)向抽象工廠范例說(shuō)明:為DAO實(shí)現(xiàn)工廠類(lèi)的策略 1 采用工廠方法設(shè)計(jì)模式如果一個(gè)DAO 工廠只為一個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),(比如ORACLE)而創(chuàng)建很多的DAO的時(shí)候,實(shí)現(xiàn)該策略 時(shí),我們考慮采用工廠方法設(shè)計(jì)模式. 假設(shè)該工廠類(lèi)創(chuàng)建了CustomerDAO, AccountDAO, OrderDAO 等一些對(duì)象。 2 使用抽象工廠設(shè)計(jì)模式:如果考慮為三種不同類(lèi)型的數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)這個(gè)策略,我們可以考慮采用抽象工廠設(shè)計(jì)模 式. 假設(shè). 這個(gè)工廠創(chuàng)建了CustomerDAO, AccountDAO, OrderDAO的一系列的DAO, 該策略運(yùn)用了在抽象工廠中產(chǎn)生 的工廠類(lèi)中的工廠方法的實(shí)現(xiàn).代碼說(shuō)明:以下代碼舉例說(shuō)明了DAO設(shè)計(jì)模式的具體實(shí)現(xiàn):我們以使用抽象工廠的設(shè)計(jì)模式 來(lái)對(duì)付多種類(lèi)型數(shù)據(jù)庫(kù)為例,在以下的例子中只具體列出CLOUDSCAPE 數(shù)據(jù)庫(kù)類(lèi)型的DAO設(shè)計(jì)模式的具體實(shí)現(xiàn),其他類(lèi)型數(shù)據(jù)庫(kù)DAO設(shè)計(jì)模式 的實(shí)現(xiàn)大同小 異.1 / Abstract class DAO Factorypublic abstract class DAOFactory/ List of DAO types supported by the factorypub lic static final int CLOUDSCAPE = 1;public static final int;ORACLE = 2;public static final int SYBASE = 3;./ There will be a method for each DAO that can be&nb sp;/ created. The concrete factories will have to /implement these methods./ 所有實(shí)現(xiàn)該抽象工廠的工廠類(lèi)中必須有的方法,用這些方法來(lái)創(chuàng)建具體的DAO 類(lèi).public abstract CustomerDAO getCustomerDAO ();public abstract AccountDAO getAccountDAO ();public abstract OrderDAO getOrderDAO();/該抽象類(lèi)的靜態(tài)方法,用他來(lái)創(chuàng)建其他具體的DAO 工廠類(lèi)public static DAOFactory getDAOFactory ( int whichFactory) switch (whichFactory) case CLOUDSCAPE: ; return new CloudscapeDAOFactory (); case ORACLE : & nbsp; return new OracleDAOFactory (); case SYBASE :; return new SybaseDAOFactory (); . default &n bsp; : return null; 2 以下是Cloudscape DAO FACTORY 類(lèi)的實(shí)現(xiàn),在他 里面實(shí)現(xiàn)了該類(lèi)型數(shù)據(jù)庫(kù)的連接,以及實(shí)現(xiàn)了他所繼承的抽象工廠類(lèi)中所必須實(shí)現(xiàn)的那些方法,在這些方法中創(chuàng)建具體的DAO對(duì) 象./ Cloudscape concrete DAO Factory implementationimport java.sql.*;publi c class CloudscapeDAOFactory extends DAOFactorypublic static final String DRIVER= COM.cloudscape.core.RmiJd bcDriver;public static final String DBURL= jdbc:cloudscape:r mi:/localhost:1099/CoreJ2EEDB;/ method to create Cloudscape connections/ 建立Cloudscape 連接public static Connection createConnection() / Use DRIVER and DBURL to create a connection / Recommend connection pool implementation/usage/創(chuàng)建CustomerDAO 對(duì)象 當(dāng)然返回的是一個(gè)該類(lèi)實(shí)現(xiàn)的接口,他的好處就是實(shí)現(xiàn)了實(shí)現(xiàn)細(xì)節(jié)的隱 蔽.public CustomerDAO getCustomerDAO() / CloudscapeCustomerDAO implements CustomerDAO returnnew CloudscapeCustomerDAO();/創(chuàng)建 AccountDAO 對(duì)象 當(dāng)然返回的是一個(gè)該類(lèi)實(shí)現(xiàn)的 接口,他的好處就是實(shí)現(xiàn)了實(shí)現(xiàn)細(xì)節(jié)的隱蔽.public AccountDAO getAccountDAO() / CloudscapeAccountDAO implements AccountDAO return&n bsp;new CloudscapeAccountDAO();/創(chuàng)建 OrderDAO 對(duì)象 當(dāng)然返回的是一個(gè)該類(lèi)實(shí)現(xiàn)的接口, 他的好處就是實(shí)現(xiàn)了實(shí)現(xiàn)細(xì)節(jié)的隱蔽.public OrderDAO getOrderDAO() / CloudscapeOrderDAO implements OrderDAO returnnew CloudscapeOrderDAO();.3 以下代碼就是具體DAO類(lèi)實(shí)現(xiàn)的接口也就是 CloudscapeCustomerDAO()實(shí)現(xiàn)的接口: CustomerDAO .在該接口中定義了所有的業(yè)務(wù)方 法./ Interface that all CustomerDAOs must supportpublic interface Cu stomerDAO public int insertCustomer (.);public boolean deleteCustomer(.);public Customer findCustomer (.);public boolean updateCustomer(.);public RowSet selectCustomersRS (.);public Collection selectCustomersTO(.);.4 以下 CloudscapeCustomerDAO類(lèi)實(shí)現(xiàn)的具體業(yè)務(wù)細(xì)節(jié)和數(shù)據(jù)操作細(xì)節(jié), 他是要向客戶(hù)數(shù)據(jù)端隱蔽 的.import java.sql.*;public class CloudscapeCustomerDAO implements ; CustomerDAO public CloudscapeCustomerDAO() / initialization / The following methods can use/ CloudscapeDAOFactory.createC onnection()/ to get a connection as requiredpublic int in sertCustomer(.) / Implement insert customer here. / Returnnewly created customer number / or a - 1 on errorpublic boolean deleteCustomer(.) / Implement delete customer here / Return& nbsp;true on success, false on failure public Customer findCustomer(.) / Implement find a customer here using supplied&nb sp;/ argument values as search criteria / Returna Transfer Object if found, / return null on error o r if not foundpublic boolean updateCustomer(.) / implement update record here using data &n bsp;/ from the customerData Transfer Object / Return true&nbs p;on success, false on failure or / error public RowSet selectCustomersRS(.) / implement search customers here using the / supplied criteria. / Return a RowSet. public Collection selectCustomersTO(.) / implement search customers here using the / supplied criteria. / Alternatively, implement to return&nb sp;a Collection / of Transfer Objects. .5 下面的代碼是數(shù)據(jù)客戶(hù)端向DAO中傳輸數(shù)據(jù)的, 他其實(shí)就是一個(gè) JAVABEAN;public class Customer implements java.io.Serializable/ member variablesint CustomerNumber;String name;&n bsp; String streetAddress;String city;./ getter&nb sp;and setter methods.6最后就是客戶(hù)數(shù)據(jù)端對(duì)這個(gè)設(shè)計(jì)的應(yīng) 用:./ create the required DAO FactoryDAOFactory cloudscapeFactory = &n bsp; DAOFactory.getDAOFactory (DAOFactory.DAOCLOUDSCAPE);/ Create a DAOCustomerDAO custDAO = cloudsc apeFactory.getCustomerDAO ();/ create a new customerint newCustNo = custDAO.insertCustomer (.);/ Find a customer object. Get the Transfer Object.Customer cust&n bsp;= custDAO.findCustomer (.);/ modify the values in the Transfer Object.cust.setAddress (.);cust.setEmail (.);/ update the customer object using the DAOcustDAO.updateCustomer (cust);/ del
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高校創(chuàng)新創(chuàng)業(yè)教育課程體系與創(chuàng)新創(chuàng)業(yè)教育評(píng)價(jià)體系構(gòu)建實(shí)踐報(bào)告
- 綠城商業(yè)物業(yè)環(huán)境清潔與垃圾處理服務(wù)協(xié)議
- 鄒婕離婚協(xié)議書(shū):共同財(cái)產(chǎn)分割與子女監(jiān)護(hù)協(xié)議
- 數(shù)字藝術(shù)展覽全息展示技術(shù)解析與觀眾互動(dòng)體驗(yàn)報(bào)告
- 汽車(chē)租賃公司駕駛員服務(wù)勞動(dòng)合同范本
- 《離婚協(xié)議書(shū)起草與協(xié)議離婚法律援助合同》
- 集體水面承包權(quán)轉(zhuǎn)讓及水域綜合利用開(kāi)發(fā)合同
- 退股合作協(xié)議:有限責(zé)任公司股東退股事宜合同
- 文化創(chuàng)意產(chǎn)業(yè)園區(qū)集資建設(shè)與文創(chuàng)產(chǎn)品銷(xiāo)售合同
- 保靖安全風(fēng)控培訓(xùn)課件
- 2025至2030中國(guó)5G毫米波設(shè)備行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 現(xiàn)代教育技術(shù)說(shuō)課
- 部編版五年級(jí)上冊(cè)語(yǔ)文單元教學(xué)計(jì)劃
- 產(chǎn)品經(jīng)理績(jī)效管理制度
- 2025年煙臺(tái)市中考?xì)v史試卷真題(含答案)
- 2025四川產(chǎn)業(yè)振興基金投資集團(tuán)有限公司招聘12人筆試參考題庫(kù)附帶答案詳解析集合
- 風(fēng)濕免疫病患者結(jié)核病診治及預(yù)防實(shí)踐指南(2025版)解讀課件
- 膜結(jié)構(gòu)車(chē)棚安裝合同協(xié)議
- 山東省2016年安裝定額解釋
- 2025-2030中國(guó)相變熱界面材料行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 《中華人民共和國(guó)公務(wù)員法概述》課件
評(píng)論
0/150
提交評(píng)論