畢業(yè)設(shè)計(jì)JAVA手機(jī)短信分享系統(tǒng)的實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)JAVA手機(jī)短信分享系統(tǒng)的實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)JAVA手機(jī)短信分享系統(tǒng)的實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)JAVA手機(jī)短信分享系統(tǒng)的實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)JAVA手機(jī)短信分享系統(tǒng)的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、摘摘 要要 隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和 j2ee 平臺(tái)的廣泛應(yīng)用,基于 b/s 的多層 web 體系結(jié)構(gòu)正在不斷的完善。web 技術(shù)的發(fā)展推動(dòng)了信息化的發(fā)展,使人們能夠 不再受地理空間的限制與其他人進(jìn)行信息的交流與共享。而開(kāi)發(fā)這樣一個(gè)信息 交流平臺(tái),正是本論文要著手處理的問(wèn)題。 其實(shí),就算用 java 建造一個(gè)不是很煩瑣的 web 應(yīng)用程序,也不是件輕松的 事情。當(dāng)為一個(gè)應(yīng)用程序建造一個(gè)構(gòu)架時(shí)有許多事情需要考慮。從高層來(lái)說(shuō), 開(kāi)發(fā)者需要考慮:怎樣建立用戶接口(user interfaces)? 在哪里處理業(yè)務(wù)邏輯? 和怎樣持久化應(yīng)用數(shù)據(jù)。這三層每一層都有它們各自的問(wèn)題需要回答。各個(gè)層 次應(yīng)該使用

2、什么技術(shù)?怎樣才能把應(yīng)用程序設(shè)計(jì)得松耦合和能靈活改變? 構(gòu)架 允許層的替換不會(huì)影響到其它層嗎?應(yīng)用程序怎樣處理容器級(jí)的服務(wù) (container level services) ,比如事務(wù)處理(transactions)? 本論文正是基于上述問(wèn)題出發(fā),以開(kāi)發(fā)一個(gè)信息交流平臺(tái)系統(tǒng)為背景,對(duì) 基于 mvc 模式的 struts 框架、hibernate 的 orm 機(jī)制和對(duì)持久對(duì)象持久化的管 理以及 spring ioc(控制反轉(zhuǎn))技術(shù)進(jìn)行了探討。并整合這三種框架:表現(xiàn)層 使用 struts;業(yè)務(wù)層使用 spring;持久層使用 hibernate 進(jìn)行系統(tǒng)的開(kāi)發(fā)。最后 結(jié)合具體的事例對(duì)系統(tǒng)的實(shí)現(xiàn)

3、作了詳細(xì)的說(shuō)明,驗(yàn)證了實(shí)現(xiàn)方法的可行性。 關(guān)鍵詞關(guān)鍵詞:j2ee struts hibernate spring 模式 框架 abstract with the rapid development of network technology and the wide use of j2ee platform, the multilayer web structure base on b/s has developed gradually. web techniques development has promoted the development of informationization,

4、 it has made people can communicate and share information without area and space limitation. however, developing such kind of information communication platform is just the case in this thesis. building non-trivial web applications with java is no trivial task. there are many things to consider when

5、 structuring architecture to house an application. from a high-level, developers are faced with decisions about how they are going to construct user interfaces, where the business logic will reside, and how to persist application data. each of these three layers has their own questions to be answere

6、d. what technologies should be implemented across each layer? how can the application be designed so that it is loosely coupled and flexible to change? does the architecture allow layers to be replaced without affecting other layers? how will the application handle container level services such as t

7、ransactions? this thesis is just base on these questions, taking an information communication platform system development as background, based on mvc architecture, discussed struts frame, hibernators orm mechanism, persistent management of persistent object and spring ioc technique and combining fra

8、meworks using three popular open source frameworks: for the presentation layer we will use struts; for our business layer we will use spring; and for our persistence layer we will use hibernate to developing this system. at the end of the thesis, illustrate the way of realizing the system by an inst

9、ance, and validate its feasibility. key words:j2ee struts hibernate spring pattern framework 摘摘 要要.1 abstract.2 第第 1 章章 概述概述 .6 1.1 課題研究目的和意義.6 1.2 研究?jī)?nèi)容.7 第第 2 章章 開(kāi)發(fā)涉及的相關(guān)技術(shù)開(kāi)發(fā)涉及的相關(guān)技術(shù).8 2.1 mysql 數(shù)據(jù)庫(kù)設(shè)計(jì)工具介紹 .8 2.2 myeclipse設(shè)計(jì)工具.8 2.3 struts2 開(kāi)發(fā)工具.9 2.4 spring技術(shù)簡(jiǎn)介.10 2.5 javascript技術(shù)簡(jiǎn)介 .11 第第 3 章章 手機(jī)短信分

10、享系統(tǒng)概述及需求分析手機(jī)短信分享系統(tǒng)概述及需求分析.12 3.1 手機(jī)短信分享系統(tǒng)概述.12 3.2 手機(jī)短信分享系統(tǒng)需求分析.12 第第 4 章章 手機(jī)短信分享系統(tǒng)的詳細(xì)設(shè)計(jì)手機(jī)短信分享系統(tǒng)的詳細(xì)設(shè)計(jì).13 4.1 框架分析.13 4.2 功能模塊簡(jiǎn)介.15 4.3 數(shù)據(jù)模型設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì).18 4.3.3 持久層的實(shí)現(xiàn)持久層的實(shí)現(xiàn).25 4.3.4 o/r映射映射.25 4.3.5 dao數(shù)據(jù)訪問(wèn)接口數(shù)據(jù)訪問(wèn)接口.26 4.3.6 dao數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)實(shí)現(xiàn).26 4.4 業(yè)務(wù)層的實(shí)現(xiàn)業(yè)務(wù)層的實(shí)現(xiàn).27 4.4.1 業(yè)務(wù)邏輯處理類的實(shí)現(xiàn)業(yè)務(wù)邏輯處理類的實(shí)現(xiàn).27 4.5 表示層的實(shí)現(xiàn)

11、表示層的實(shí)現(xiàn).28 4.6 view層的實(shí)現(xiàn)層的實(shí)現(xiàn).29 4.7 model層的實(shí)現(xiàn)層的實(shí)現(xiàn).30 4.8 controller層的實(shí)現(xiàn)層的實(shí)現(xiàn).30 第第 5 章章 手機(jī)短信分享系統(tǒng)的界面實(shí)現(xiàn)手機(jī)短信分享系統(tǒng)的界面實(shí)現(xiàn).32 5.15.1 系統(tǒng)首頁(yè).32 5.25.2 精品鈴聲 .34 5.35.3 手機(jī)主題.38 5.45.4 圖片下載.40 5.55.5 游戲下載.43 5.55.5 短信下載.45 第第 6 章章 手機(jī)短信分享系統(tǒng)測(cè)試手機(jī)短信分享系統(tǒng)測(cè)試 .46 6.1 測(cè)試概述.46 6.2 黑盒測(cè)試.46 總結(jié)與展望總結(jié)與展望 .47 7.1 本文的總結(jié)與展望本文的總結(jié)與展望 .

12、47 參考文獻(xiàn)參考文獻(xiàn).47 致謝致謝.50 第 1 章 概述 1.1 課題研究目的和意義 從來(lái)沒(méi)有任何事物的發(fā)展像互聯(lián)網(wǎng)那樣,對(duì)人類的活動(dòng)產(chǎn)生如此深刻的 影響。人們?cè)絹?lái)越依賴于 internet 進(jìn)行信息的交流與共享。隨著網(wǎng)絡(luò)的飛速發(fā) 展,信息交流平臺(tái)在網(wǎng)絡(luò)上扮演角色越來(lái)越重要了。信息交流平臺(tái)從她誕生的 那一刻起就帶有十分明確的個(gè)性化的人文色彩,作為一種遠(yuǎn)程電子通訊手段, 信息交流平臺(tái)允許一定范圍內(nèi)的用戶以十分廉價(jià)的方式,方便快捷地進(jìn)行信息 和文件資源的共享,以信件和電子討論的形式進(jìn)行交流。毫不夸張的說(shuō),信息 交流平臺(tái)是網(wǎng)民互動(dòng)溝通的最佳紐帶,是互聯(lián)網(wǎng)的靈魂。 信息交流平臺(tái)已成為主流網(wǎng)民不可

13、缺少的一項(xiàng)基本生活內(nèi)容。它在新興的 電子文化、信息咨詢和商業(yè)服務(wù)領(lǐng)域也勢(shì)必蘊(yùn)藏巨大的市場(chǎng)。比如信息交流平 臺(tái)提供的信息布告區(qū)可為企業(yè)發(fā)布它的產(chǎn)品介紹、推廣、宣傳、服務(wù)等信息, 能把企業(yè)的新產(chǎn)品快速的推向市場(chǎng)。 所以對(duì)信息交流平臺(tái)的研究是完全有必要的。j2ee 是 sun one 的重量級(jí) 產(chǎn)品,作為一種企業(yè)級(jí) web 應(yīng)用程序開(kāi)發(fā)技術(shù),j2ee 是目前唯一在市場(chǎng)上得 到了廣泛應(yīng)用的技術(shù)體系。j2ee 以 java 為核心技術(shù),更接近或者滿足于互聯(lián) 網(wǎng)在智能化 web 服務(wù)上對(duì)分布性、開(kāi)放性和平臺(tái)無(wú)關(guān)性的要求,同時(shí)它在安全 性、健壯性、組件化等方面也更為成熟穩(wěn)定,獲得了眾多 it 廠商如 ibm

14、、oracle、bea 等共同制定標(biāo)準(zhǔn)并提供技術(shù)支持,因此具有強(qiáng)大的功能,是 電子商務(wù)、遠(yuǎn)程教育等開(kāi)發(fā)的首選平臺(tái)。但是,即使我們用先進(jìn)的 j2ee 來(lái)開(kāi)發(fā) web 應(yīng)用,也面臨著許多問(wèn)題需要考慮:怎樣建立用戶接口(user interfaces)?在哪里處理業(yè)務(wù)邏輯和怎樣持久化應(yīng)用數(shù)據(jù)? struts、spring、hibernate 這三個(gè)基于 web 應(yīng)用開(kāi)發(fā)的開(kāi)源框架,可以為我 們解決這些問(wèn)題。如何把一個(gè) web 應(yīng)用分層而整合 struts、spring、hibernate 技術(shù),盡可能的將頁(yè)面顯示、業(yè)務(wù)邏輯和數(shù)據(jù)處 理相分離,最大限度地降低系統(tǒng)各模塊之間的耦合性,從而增強(qiáng)系統(tǒng)的可擴(kuò)展

15、 性與可維護(hù)性,提高代碼重用率,使系統(tǒng)的層次結(jié)構(gòu)更加清晰,易于開(kāi)發(fā)人員 的分工協(xié)作,充分發(fā)揮開(kāi)發(fā)人員的各自特長(zhǎng),這是一個(gè)值得研究探討的問(wèn)題。 struts 是基于 mvc 模式的框架技術(shù)。采用 struts 可以簡(jiǎn)化遵循 mvc 設(shè)計(jì) 模式的 web 應(yīng)用的開(kāi)發(fā)工作,很好的實(shí)現(xiàn)代碼重用,使開(kāi)發(fā)人員從繁瑣的工作 中解脫出來(lái),快速開(kāi)發(fā)具有強(qiáng)可擴(kuò)展性的 web 應(yīng)用,大大簡(jiǎn)化開(kāi)發(fā)過(guò)程,縮短 開(kāi)發(fā)周期,提高開(kāi)發(fā)效率。hibernate 是一項(xiàng)新興的 orm 技術(shù),它把普通 java 對(duì)象映射到關(guān)系數(shù)據(jù)庫(kù)表,并提供對(duì)對(duì)象的持久化操作。使得 java 開(kāi)發(fā) 者能夠高效地對(duì)關(guān)系數(shù)據(jù)庫(kù)表進(jìn)行增、刪、改、查操作

16、而不用直接面對(duì) jdbc、sql 語(yǔ)句,讓開(kāi)發(fā)人員把精力集中在如何解決實(shí)際業(yè)務(wù)處理問(wèn)題上。而 借助于 spring ioc 和 aop,使得應(yīng)用中對(duì)象的關(guān)系更加清晰、一致,而且還使 得一切對(duì)象可控。最重要的一點(diǎn)是,對(duì)象本身的生命周期及對(duì)象之間的關(guān)系不 用再讓開(kāi)發(fā)者費(fèi)神了。 基于上述分析,研究實(shí)現(xiàn) struts、spring、hibernate 三個(gè)框架的整合來(lái)解決 web 應(yīng)用開(kāi)發(fā)中所面臨的上述問(wèn)題,從而提高程序的開(kāi)發(fā)效率,增強(qiáng)系統(tǒng)的可 擴(kuò)展性與可維護(hù)性,提高代碼重用率將會(huì)是一個(gè)很有意義的課題。 1.2 研究?jī)?nèi)容 以 j2ee 為基礎(chǔ)實(shí)現(xiàn)一個(gè)手機(jī)短信共享平臺(tái)為出發(fā)點(diǎn),設(shè)計(jì)了一個(gè)整合 ssh 技

17、術(shù)的架構(gòu),并分別用 struts、hibernate、spring 實(shí)現(xiàn)了表示層,業(yè)務(wù)層,持久層, 最終完成了本系統(tǒng)。 第 2 章 開(kāi)發(fā)涉及的相關(guān)技術(shù) 2.1mysql 數(shù)據(jù)庫(kù)設(shè)計(jì)工具介紹 mysql 是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典 mysqlab 公司, 在 2008 年 1 月 16 號(hào)被 sun 公司收購(gòu)。mysql 被廣泛地應(yīng)用在 internet 上的中 小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一 特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了 mysql 作為網(wǎng)站數(shù) 據(jù)庫(kù)。 mysql 的海豚標(biāo)志的名字叫“sakila” ,它是由 my

18、sql ab 的創(chuàng)始人從用戶 在“海豚命名”的競(jìng)賽中建議的大量的名字表中選出的。獲勝的名字是由來(lái)自 非洲斯威士蘭的開(kāi)源軟件開(kāi)發(fā)者 ambrose twebaze 提供。根據(jù) ambrose 所說(shuō), sakila 來(lái)自一種叫 siswati 的斯威士蘭方言,也是在 ambrose 的家鄉(xiāng)烏干達(dá)附 近的坦桑尼亞的 arusha 的一個(gè)小鎮(zhèn)的名字。 1. 使用 c 和 c+編寫(xiě),并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移 植性 2. 支持 aix、freebsd、hp-ux、linux、mac os、novell netware、openbsd、os/2 wrap、solaris、windows

19、等多種操作系統(tǒng) 3. 為多種編程語(yǔ)言提供了 api。這些編程語(yǔ)言包括 c、c+、eiffel、java、perl、php、python、ruby 和 tcl 等。 4. 支持多線程,充分利用 cpu 資源 5. 優(yōu)化的 sql 查詢算法,有效地提高查詢速度 6. 既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能 夠作為一個(gè)庫(kù)而嵌入到其他的軟件中提供多語(yǔ)言支持,常見(jiàn)的編碼如 中文的 gb 2312、big5,日文的 shift_jis 等都可以用作數(shù)據(jù)表名和 數(shù)據(jù)列名 7. 提供 tcp/ip、odbc 和 jdbc 等多種數(shù)據(jù)庫(kù)連接途徑 8. 提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的

20、管理工具 9. 可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù) 2.2myeclipse 設(shè)計(jì)工具 myeclipse 企業(yè)級(jí)工作平臺(tái)(myeclipse enterprise workbench ,簡(jiǎn)稱 myeclipse)是對(duì) eclipse ide 的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫(kù)和 j2ee 的開(kāi) 發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐 富的 j2ee 集成開(kāi)發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,完整支 持 html, struts, jsf, css, javascript, sql, hibernate。在結(jié)構(gòu)上, myeclipse 的特征可以被分為

21、7 類: 1. j2ee 模型 2. web 開(kāi)發(fā)工具 3. ejb 開(kāi)發(fā)工具 4. 應(yīng)用程序服務(wù)器的連接器 5. j2ee 項(xiàng)目部署服務(wù) 6. 數(shù)據(jù)庫(kù)服務(wù) 7. myeclipse 整合幫助 對(duì)于以上每一種功能上的類別,在 eclipse 中都有相應(yīng)的功能部件,并通 過(guò)一系列的插件來(lái)實(shí)現(xiàn)它們。myeclipse 結(jié)構(gòu)上的這種模塊化,可以讓我們?cè)?不影響其他模塊的情況下,對(duì)任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級(jí)。 簡(jiǎn)單而言,myeclipse 是 eclipse 的插件,也是一款功能強(qiáng)大的 j2ee 集成 開(kāi)發(fā)環(huán)境,支持代碼編寫(xiě)、配置、測(cè)試以及除錯(cuò)。 myeclipse7.0 的發(fā)布意味著我們不再需要配

22、置 tomcat 以及服務(wù)器了,你所 需要做的僅僅是安裝 myeclipse 7.0。7.0 發(fā)行版包括在 7.0m2 和 6.6 版本基礎(chǔ) 上對(duì) bug 的修復(fù)和功能的加強(qiáng)。提供的支持包括:eclipse 3.4.1/ganymede、rest web 服務(wù)、新的 myeclipse 操作板、spring 工具集更新、 集成 manven2、open jpa 支持、高級(jí) javascript 工具、專業(yè)的 jsdt 實(shí)現(xiàn)、報(bào) 表工具加強(qiáng)、jsf 和 icefaces 工具更新。 2.3 struts2 開(kāi)發(fā)工具 struts2 號(hào)稱是一個(gè)全新的框架,但這僅僅是相對(duì) struts 1 而言。s

23、truts 2 與 struts 1 相比,確實(shí)有很多革命性的改進(jìn),但它并不是新發(fā)布的新框架, 而是在另一個(gè)赫赫有名的框架:webwork 基礎(chǔ)上發(fā)展起來(lái)的。從某種程度上來(lái) 講,struts2 沒(méi)有繼承 struts 1 的血統(tǒng),而是繼承 webwork 的血統(tǒng)?;蛘哒f(shuō), webwork 衍生出了 struts2,而不是 struts 1 衍生了 struts2。因?yàn)?struts2 是 webwork 的升級(jí),而不是一個(gè)全新的框架,因此穩(wěn)定性、性能等各方面都有 很好的保證:而且吸收了 struts 1 和 webwork 兩者的優(yōu)勢(shì),因此,是一個(gè)非常 值得期待的框架。 apache stru

24、ts2 是一個(gè)優(yōu)雅的,可擴(kuò)展的 java ee web 框架??蚣茉O(shè)計(jì)的 目標(biāo)貫穿整個(gè)開(kāi)發(fā)周期,從開(kāi)發(fā)到發(fā)布,包括維護(hù)的整個(gè)過(guò)程。 apache struts 2 即是之前大家所熟知的 webwork 2。在經(jīng)歷了幾年的各自 發(fā)展后,webwork 和 struts 社區(qū)決定合二為一,也即是 struts 2 2.4 spring 技術(shù)簡(jiǎn)介 spring 是一個(gè)開(kāi)源框架,它由 rod johnson 創(chuàng)建。它是為了解決企業(yè)應(yīng)用 開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。spring 使用基本的 javabean 來(lái)完成以前只可能由 ejb 完成的事情。然而,spring 的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可

25、測(cè) 試性和松耦合的角度而言,任何 java 應(yīng)用都可以從 spring 中受益。 目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性 功能:使用基本的 javabean 代替 ejb,并提供了更多的企業(yè)應(yīng)用功 能 范圍:任何 java 應(yīng)用 簡(jiǎn)單來(lái)說(shuō),spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(ioc)和面向切面(aop)的 容器框架。 輕量從大小與開(kāi)銷兩方面而言 spring 都是輕量的。完整的 spring 框架可以在一個(gè)大小只有 1mb 多的 jar 文件里發(fā)布。并且 spring 所需 的處理開(kāi)銷也是微不足道的。此外,spring 是非侵入式的:典型地,spring 應(yīng) 用中的對(duì)象不依賴于 spring 的特定

26、類。 控制反轉(zhuǎn)spring 通過(guò)一種稱作控制反轉(zhuǎn)(ioc)的技術(shù)促進(jìn)了 松耦合。當(dāng)應(yīng)用了 ioc,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái), 而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為 ioc 與 jndi 相反 不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將 依賴傳遞給它。 面向切面spring 提供了面向切面編程的豐富支持,允許通過(guò)分 離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù) (transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的 完成業(yè)務(wù)邏輯僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注 點(diǎn),例如日志

27、或事務(wù)支持。 容器spring 包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意 義上它是一種容器,你可以配置你的每個(gè) bean 如何被創(chuàng)建基于一個(gè)可配置 原型(prototype) ,你的 bean 可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成 一個(gè)新的實(shí)例以及它們是如何相互關(guān)聯(lián)的。然而,spring 不應(yīng)該被混同于 傳統(tǒng)的重量級(jí)的 ejb 容器,它們經(jīng)常是龐大與笨重的,難以使用。 框架spring 可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在 spring 中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè) xml 文件里。spring 也 提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等) ,將應(yīng)用邏

28、輯的開(kāi)發(fā)留 給了你。 所有 spring 的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于 測(cè)試的代碼。它們也為 spring 中的各種模塊提供了基礎(chǔ)支持。 2.5 javascript 技術(shù)簡(jiǎn)介 hibernate 是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì) jdbc 進(jìn)行了非常 輕量級(jí)的對(duì)象封裝,使得 java 程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱 數(shù)據(jù)庫(kù)。 hibernate 可以應(yīng)用在任何使用 jdbc 的場(chǎng)合,既可以在 java 的客戶 端程序使用,也可以在 servlet/jsp 的 web 應(yīng)用中使用,最具革命意義的是, hibernate 可以在應(yīng)用 ejb 的 j2ee

29、 架構(gòu)中取代 cmp,完成數(shù)據(jù)持久化的重任。 hibernate 的核心接口一共有 5 個(gè),分別為: session、sessionfactory、transaction、query 和 configuration。這 5 個(gè)核 心接口在任何開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存 取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹。 session 接口:session 接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的 crud 操作(crud 的任 務(wù)是完成與數(shù)據(jù)庫(kù)的交流,包含了很多常見(jiàn)的 sql 語(yǔ)句。)。但需要注意的是 session 對(duì)象是非線程安全的。同時(shí),hibernate 的

30、session 不同于 jsp 應(yīng)用中 的 httpsession。這里當(dāng)使用 session 這個(gè)術(shù)語(yǔ)時(shí),其實(shí)指的是 hibernate 中 的 session,而以后會(huì)將 httpsesion 對(duì)象稱為用戶 session。 sessionfactory 接口:sessionfactory 接口負(fù)責(zé)初始化 hibernate。它充當(dāng) 數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建 session 對(duì)象。這里用到了工廠模式。需要注 意的是 sessionfactory 并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需 要一個(gè) sessionfactory 就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指 定一

31、個(gè) sessionfactory。 configuration 接口:configuration 接口負(fù)責(zé)配置并啟動(dòng) hibernate,創(chuàng)建 sessionfactory 對(duì)象。在 hibernate 的啟動(dòng)的過(guò)程中,configuration 類的實(shí) 例首先定位映射文檔位置、讀取配置,然后創(chuàng)建 sessionfactory 對(duì)象。 transaction 接口:transaction 接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的, 開(kāi)發(fā)人員也可以設(shè)計(jì)編寫(xiě)自己的底層事務(wù)處理代碼。 query 和 criteria 接口:query 和 criteria 接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。 它可以使用 hql

32、 語(yǔ)言或 sql 語(yǔ)句兩種表達(dá)方式。 第 3 章 手機(jī)短信分享系統(tǒng)概述及需求分析 3.1 手機(jī)短信分享系統(tǒng)概述 手機(jī)短信分享系統(tǒng)是一個(gè)對(duì)手機(jī)短信和相應(yīng)服務(wù)進(jìn)行分享的信息管理系統(tǒng), 它包含了音樂(lè)鈴聲模塊、手機(jī)主題模塊、手機(jī)圖片下載模塊、手機(jī)游戲模塊、 后臺(tái)管理模塊和手機(jī)短信模塊這六個(gè)功能模塊。網(wǎng)站中都是關(guān)于手機(jī)服務(wù)的模 塊,業(yè)務(wù)中包括對(duì)相應(yīng)服務(wù)的點(diǎn)擊量、更新時(shí)間等信息的統(tǒng)計(jì),可以通過(guò)這些 信息把動(dòng)態(tài)的根據(jù)需求顯示在頁(yè)面上。使用戶更能清晰的根據(jù)自己的需求找到 相應(yīng)的服務(wù)和需求。 手機(jī)短信分享系統(tǒng)是一個(gè)基于 b/s 的多層 web 應(yīng)用系統(tǒng),主要為上網(wǎng)手 機(jī)用戶提供了一個(gè)信息交流的平臺(tái)。用戶可以根據(jù)

33、需要在分享同上下載資源, 并且可以發(fā)表評(píng)論,提出問(wèn)題并表達(dá)自己的觀點(diǎn)。同時(shí)也可以查閱他人的評(píng)論 等。 3.2 手機(jī)短信分享系統(tǒng)需求分析 需求分析是指,需求分析人員將客戶描述的需求用計(jì)算機(jī)語(yǔ)言描述出來(lái), 分析用戶的需求是否能實(shí)現(xiàn),是否還可以提交更多的功能。要開(kāi)發(fā)一個(gè)軟件產(chǎn) 品,最首要也是最重要的就是需求分析,它是決定一個(gè)系統(tǒng)成功與否的關(guān)鍵。 對(duì)于開(kāi)發(fā)一個(gè)分享系統(tǒng),首先需要確定它能提供那些功能。用戶使用分享 系統(tǒng)是按照一定的流程來(lái)進(jìn)行的:用戶進(jìn)入分享系統(tǒng),可以查詢需要的查看信 息、查閱服務(wù)、評(píng)論服務(wù)內(nèi)容、管理員要對(duì)分享系統(tǒng)進(jìn)行管理,系統(tǒng)要具有創(chuàng) 建、編輯、刪除版塊,管理的用戶,管理信息和設(shè)置的功能

34、等 1.根據(jù)服務(wù)分類顯示服務(wù)。 2.根據(jù)點(diǎn)擊量顯示服務(wù)內(nèi)容 3.根據(jù)更新時(shí)間顯示服務(wù)內(nèi)容 4.個(gè)性化界面定制 5.根據(jù)搜索顯示服務(wù)內(nèi)容。 6.根據(jù)推薦用戶顯示服務(wù)內(nèi)容 第 4 章 手機(jī)短信分享系統(tǒng)的詳細(xì)設(shè)計(jì) 詳細(xì)設(shè)計(jì)階段的根本任務(wù)是確定怎樣具體的實(shí)現(xiàn)要求的目標(biāo)系統(tǒng),也就是 說(shuō),經(jīng)過(guò)這個(gè)階段的設(shè)計(jì)工作,應(yīng)該寫(xiě)出對(duì)系統(tǒng)的精確描述,從而在編輯階段 可以把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的程序。此階段要設(shè)計(jì)出 程序的“藍(lán)圖” ,開(kāi)發(fā)人員根據(jù)這個(gè)藍(lán)圖寫(xiě)出實(shí)際的程序代碼。因此,詳細(xì)設(shè)計(jì) 的結(jié)果基本決定了最終程序代碼的質(zhì)量。除了應(yīng)該保證程序的可靠性之外,也 應(yīng)保證編寫(xiě)的程序可讀性好,易于理解、測(cè)試、

35、修改和維護(hù),這一點(diǎn)是詳細(xì)設(shè) 計(jì)的最重要的目標(biāo)與任務(wù)。 此外,界面設(shè)計(jì)也是本階段完成的主要工作。界面提供了一個(gè)人機(jī)對(duì)話的 有效窗口,一個(gè)良好的界面不僅能夠使用戶方便快捷的應(yīng)用這個(gè)系統(tǒng),而且還 可以通過(guò)界面形象的了解系統(tǒng)所具有的功能。因此,界面設(shè)計(jì)是系統(tǒng)設(shè)計(jì)過(guò)程 中的一個(gè)重要的環(huán)節(jié)。 4.1 框架分析 接下來(lái)我們所要做的就是對(duì)整個(gè)系統(tǒng)進(jìn)行邏輯分層,已便于系統(tǒng)的開(kāi)發(fā)、 維護(hù)以及后續(xù)新的功能的擴(kuò)充。軟件的邏輯分層指的是在單個(gè)的軟件模塊中完 成相對(duì)獨(dú)立的特定的功能。軟件的層必須符合以下特征: 每個(gè)層由一組相關(guān)的類或組件構(gòu)成,共同完成特定的功能。 層與層之間存在自上而下的依賴關(guān)系,即上層組件會(huì)訪問(wèn)下層組件

36、的 api,而下層組件不應(yīng)該依賴上層組件。 每個(gè)層對(duì)上層公開(kāi)api,但具體的實(shí)現(xiàn)細(xì)節(jié)對(duì)外透明。當(dāng)某一層的實(shí)現(xiàn) 發(fā)生變化,只要它的api不變,不會(huì)影響其他層的實(shí)現(xiàn)。 軟件分層的優(yōu)點(diǎn),主要表現(xiàn)在以下幾個(gè)方面: 提高軟件的伸縮性。伸縮性指應(yīng)用程序是否支持更多的用戶。 提高了軟件的可維護(hù)性??删S護(hù)性指的時(shí)當(dāng)發(fā)生需求變化時(shí),只需修改 軟件的某一部分,不會(huì)影響其他部分的代碼。層數(shù)越多,可維護(hù)性也會(huì) 不斷提高,因?yàn)樾薷能浖哪骋粚拥膶?shí)現(xiàn),不會(huì)影響其他的層。 提高軟件的可擴(kuò)展性??蓴U(kuò)展性指的是在現(xiàn)有系統(tǒng)中增加新功能的難易 程度。層數(shù)越少,增加新功能就越容易破壞現(xiàn)有的程序結(jié)構(gòu)。層數(shù)越多, 就可以在每個(gè)層中提供擴(kuò)

37、展點(diǎn),不會(huì)打破應(yīng)用的整體框架。 提高軟件的可重用性??芍赜眯灾傅氖菓?yīng)用程序代碼沒(méi)有冗余,同一個(gè) 應(yīng)用程序能滿足多種需求。 提高軟件的可管理性。可管理性指的是管理系統(tǒng)的難易程度。將應(yīng)用程 序分為多層后,可將工作分給不同的開(kāi)發(fā)小組,從而便于管理。 我們采用流行的mvc設(shè)計(jì)模式,整合struts、spring、hibernate框架,把整 個(gè)系統(tǒng)分為四層:表示層 ( presentation layer)、業(yè)務(wù)層(business layer) 、持久 層 (persistence layer ) 、域模塊層(domain model layer ) ,并用struts實(shí)現(xiàn)表 現(xiàn)層, 用spring

38、實(shí)現(xiàn)業(yè)務(wù)層, 用hibernate實(shí)現(xiàn)數(shù)據(jù)持久層。 表示層:提供與用戶交互的界面,主要負(fù)責(zé)接受用戶請(qǐng)求并做出響應(yīng)。 它接受用戶的輸入,將數(shù)據(jù)傳遞給業(yè)務(wù)層,并將業(yè)務(wù)層返回的處理結(jié)果 以dhtml的形式呈現(xiàn)給用戶。這一層的最佳實(shí)現(xiàn)模式就是mvc模式, 所以借助成熟的采用mvc模式的struts來(lái)實(shí)現(xiàn)該層。struts主要在這一層 負(fù)責(zé)為用戶管理請(qǐng)求和響應(yīng);提供actionfrom來(lái)封裝與用戶互動(dòng)的數(shù)據(jù) 元素;提供控制器(controller)代理調(diào)用業(yè)務(wù)邏輯;處理從其他層拋出 的struts action異常; 業(yè)務(wù)層:具體的業(yè)務(wù)邏輯通常導(dǎo)致代碼的高度耦合,因此我們將業(yè)務(wù)邏 輯分為單獨(dú)的一層,其目

39、的也是希望通過(guò)該層,來(lái)降低它與系統(tǒng)其他部 分的耦合度。該層借助spring可以達(dá)到更好的效果。通過(guò)spring的ioc 模式來(lái)裝配業(yè)務(wù)組件,如dao對(duì)象,使系統(tǒng)更具擴(kuò)展性。通過(guò)spring aop(面向方面)思想,來(lái)集中處理具體業(yè)務(wù),如事務(wù)管理,使代碼更 為簡(jiǎn)潔,增加復(fù)用,提高開(kāi)發(fā)效率。所以spring主要在這一層負(fù)責(zé)處理 應(yīng)用程序的業(yè)務(wù)邏輯和業(yè)務(wù)驗(yàn)證;管理事務(wù);管理業(yè)務(wù)層對(duì)象之間的依 賴;從表示層中提供一個(gè)上下文(context)給業(yè)務(wù)層獲得業(yè)務(wù)服務(wù) (business services ) ;管理從業(yè)務(wù)邏輯到持久層的實(shí)現(xiàn)。 持久層:在傳統(tǒng)的系統(tǒng)開(kāi)發(fā)中該層占據(jù)大部分的開(kāi)發(fā)時(shí)間,且隨著需求 的

40、變更功能的修改,逐漸變得難以控制,特別是表結(jié)構(gòu)的變化可能導(dǎo)致 整個(gè)系統(tǒng)大動(dòng)干戈。hibernate框架為java提供了對(duì)象關(guān)系持久化 (object-to-relational persistence)機(jī)制和查詢服務(wù)。借助hibernate,利 用其持久化機(jī)制和crud封裝來(lái)減少代碼開(kāi)發(fā)量和其他層次的耦合度。 域模塊層:該層應(yīng)該說(shuō)是orm思想的產(chǎn)物,orm用對(duì)象關(guān)聯(lián)數(shù)據(jù)表, 允許數(shù)據(jù)表中數(shù)據(jù)放入對(duì)象,也允許對(duì)象中數(shù)據(jù)更新到數(shù)據(jù)表,我們將 這些對(duì)象的集合歸為一個(gè)專門的層次即domain layer。域?qū)ο蟪袚?dān)各層 之間數(shù)據(jù)通信的載體。實(shí)際上域?qū)ο笠彩且粋€(gè)完完全全的業(yè)務(wù)對(duì)象,如 board對(duì)象,f

41、riend對(duì)象。通過(guò)對(duì)業(yè)務(wù)的對(duì)象化,這有利于業(yè)務(wù)邏輯的 重用。 將系統(tǒng)進(jìn)行如上的分層,從理論上可以讓其承擔(dān)各自職責(zé),表示層提供友 好的用戶交互、業(yè)務(wù)層處理具體問(wèn)題領(lǐng)域邏輯、持久層完成與數(shù)據(jù)庫(kù)讀取存儲(chǔ)、 域模型承擔(dān)數(shù)據(jù)傳輸?shù)妮d體。將一個(gè)復(fù)雜的應(yīng)用領(lǐng)域細(xì)分成諸多最小單元,然 后進(jìn)行串聯(lián)、組合。使得一個(gè)應(yīng)用領(lǐng)域的實(shí)現(xiàn)過(guò)程中,最小單元達(dá)到最大復(fù)用, 這也是我們將icps系統(tǒng)進(jìn)行上述分層的原因之一。 分層后的設(shè)計(jì)圖如圖5-1所示。 圖5-1 系統(tǒng)架構(gòu)層次圖 4.2 功能模塊簡(jiǎn)介 4.2.1 系統(tǒng)功能劃分:系統(tǒng)功能劃分: 根據(jù)系統(tǒng)所實(shí)現(xiàn)的功能,可作出如下圖所示的結(jié)構(gòu)劃分: 根據(jù)服務(wù)分類顯示服務(wù)類型 精品鈴

42、聲服務(wù) 圖片下載服務(wù) 短信服務(wù) 首頁(yè) 手機(jī)主題服務(wù) 手機(jī)游戲服務(wù) 顯示其他服務(wù)的信息 根據(jù)點(diǎn)擊量和更新時(shí)間顯示服務(wù)列表 顯示具體鈴聲分類列表顯示鈴聲列表 顯示總體鈴聲數(shù)數(shù)據(jù)和排行 顯示所有手機(jī)主題數(shù)據(jù)顯示手機(jī)主題 顯示總手機(jī)主題數(shù)據(jù)和排行 顯示具體圖片分類列表和數(shù)據(jù)顯示圖片下載 顯示總圖片下載數(shù)據(jù)和排行 顯示具體游戲分類列表和數(shù)據(jù)顯示手機(jī)游戲 顯示總手機(jī)游戲數(shù)據(jù)和排行 顯示具體短信分類列表和數(shù)據(jù)顯示短信服務(wù) 顯示總短信服務(wù)數(shù)據(jù)和排行 4.2.2 系統(tǒng)邏輯流程圖系統(tǒng)邏輯流程圖: 首頁(yè) 服務(wù)總頁(yè)面(分類,排行,更新時(shí)間)信息列表 【頁(yè)面邏輯流程圖】 選擇一個(gè)服務(wù)類型 選擇一個(gè)下載內(nèi)容 下載頁(yè)面 下

43、載完成 按說(shuō)明進(jìn)行下載 搜索內(nèi)容 搜索頁(yè)面 選擇一個(gè)下載內(nèi)容 分類內(nèi)容 分類信息頁(yè)面 選擇一個(gè)下載內(nèi)容 頁(yè)面需要的信息 服務(wù)層(service 類) - 由 spring 依賴注入實(shí)體 類 dao 層(hibernate 查詢) 查詢數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù) action 類(struts2)提供 根據(jù) id 或者 其他需求查詢數(shù)據(jù) 結(jié)束 結(jié)束 【數(shù)據(jù)加載邏輯流程圖】 3.3 根據(jù)搜索 信息加載 數(shù)據(jù) 2.2 排行榜信 息 2.3 搜索信息 3.4 根據(jù)具體 服務(wù)的 id 查詢數(shù)據(jù) 庫(kù)獲取數(shù) 據(jù) 2.4 顯示具體 信息 1 選擇服務(wù) 用戶 d1 數(shù) 據(jù) 庫(kù) 信 息 2.1 分類信息 3.2 分類排行

44、榜數(shù)據(jù) 3.1 搜索分類 信息數(shù)據(jù) 4.2.3 系統(tǒng)數(shù)據(jù)流圖:系統(tǒng)數(shù)據(jù)流圖: 通過(guò)以上數(shù)據(jù)流圖的描述,很清晰的看出整個(gè)數(shù)據(jù)的流向。用戶登錄主頁(yè)面界面后, 選擇相應(yīng)的服務(wù),分別處理其相應(yīng)的加載工作。然后把數(shù)據(jù)通過(guò)服務(wù)層反傳遞到前臺(tái)頁(yè)面 jsp 進(jìn)行顯示。 4.3 數(shù)據(jù)模型設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì) 數(shù)據(jù)庫(kù)設(shè)計(jì)是最重要的,如果數(shù)據(jù)庫(kù)的設(shè)計(jì)不是很清晰,那么在服務(wù)層使 用的時(shí)候常常會(huì)造成數(shù)據(jù)冗余。 系統(tǒng)需要大量的數(shù)據(jù)來(lái)支持的,建立合適的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)是非常重要 的,那么首先就要設(shè)計(jì)合理、穩(wěn)定的數(shù)據(jù)模型。根據(jù)多次需求分析,對(duì)需求已 經(jīng)十分明確,經(jīng)過(guò)詳細(xì)的需求分析,了解到各個(gè)表應(yīng)有的關(guān)系,將系統(tǒng)的數(shù)據(jù) 模型設(shè)計(jì)完

45、成。 完成了整合 struts、hibernate 和 spring 框架的設(shè)計(jì),把應(yīng)用系統(tǒng)分為了四 層:表示層、業(yè)務(wù)層、持久層、域模塊層。本章主要探討如何引入 struts、hibernate 和 spring 框架技術(shù)分別實(shí)現(xiàn)表示層、業(yè)務(wù)層、持久層,并最 終完成共享系統(tǒng)的實(shí)現(xiàn)。 4.3.1 數(shù)據(jù)庫(kù)采用數(shù)據(jù)庫(kù)采用 hibernate 進(jìn)行架構(gòu)進(jìn)行架構(gòu) class entity: private string id; private string title; private string content; private int clicktimes; private date time;

46、private date updatetime; private user user; private themetype themetype; private string action; class game extends entity: private image image; private string url; private set comments; 游戲(game)表 存儲(chǔ)游戲的屬性和狀態(tài) 字段名稱數(shù)據(jù)類型是否為主鍵 id文本是 title文本否 content長(zhǎng)文本否 clicktimes整型否 time文本否 updatetime整型否 action文本否 user_i

47、d整型(外鍵)否 themetype_id文本否 url整型否 image整型否 class image extends entity: private string url; private set comments; 圖像(image)表存儲(chǔ)圖像的屬性和狀態(tài) 字段名稱數(shù)據(jù)類型是否為主鍵 id文本是 title文本否 content長(zhǎng)文本否 clicktimes整型否 time文本否 updatetime整型否 action文本否 user_id整型(外鍵)否 themetype_id文本否 url整型否 class music extends entity: private string

48、url; private set comments; 鈴聲(music)表 字段名稱數(shù)據(jù)類型是否為主鍵 id文本是 title文本否 content長(zhǎng)文本否 clicktimes整型否 time文本否 updatetime整型否 action文本否 user_id整型(外鍵)否 themetype_id文本否 url整型否 class sms extends entity: private set comments; 短信(sms)表存儲(chǔ)短信的屬性和狀態(tài) 字段名稱數(shù)據(jù)類型是否為主鍵 id文本是 title文本否 content長(zhǎng)文本否 clicktimes整型否 time文本否 updatet

49、ime整型否 action文本否 user_id整型(外鍵)否 themetype_id文本否 abstract class comment: private int id; private string title; private string content; private date time; private user user; private string action; class themecomment: class gamecomment: class musiccomment: class smscomment: 評(píng)論(comment)表 存儲(chǔ)評(píng)論的屬性和狀態(tài) 字段名稱

50、數(shù)據(jù)類型是否為主鍵 id文本是 type文本否 title文本否 content長(zhǎng)文本否 time時(shí)間否 action整型否 sms_id文本否 user_id整型(外鍵)否 image_id文本否 music_id文本 theme_id文本 game_id文本 用戶(user)類: class user: private int id; private string name; private string password; private string petname; private permission permission; private int cellphone; priva

51、te userdetailedinformation detial; private set groups; private set comments; private set entities; private set creategroups; class userdetailedinformation: private int id; private image image; private string sex; private date birthday; private string interest; private date registertime; private date

52、 lastlogintime; 用戶(user)表 存儲(chǔ)用戶的屬性和狀態(tài) 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 name文本否 password文本否 permission_id整型(外鍵)否 petname文本否 cellphone整型否 detail_id整型否 用戶詳細(xì)信息(userdetailedinformation)表: 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 image整型否 sex文本否 birthday日期否 interest文本否 registertime日期否 lastlogintime日期否 組(group)類: class group: private int id

53、; private string name; private string description; private string notice; private image image; private date time; private user user; private set members; 組(group)信息 存儲(chǔ)組別的屬性和狀態(tài) 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 name文本否 description文本否 notice文本否 image整型否 time日期否 user整型否 class type: private int id; private string nam

54、e; private set themetypes; 類別總分類(type)信息 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 name文本否 class themetype: private int id; private string name; private type type; 具體類別分類(themetype)信息 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 name文本否 type_id整型否 class permission: private int id; private string name; 權(quán)限(permission)信息 字段名稱數(shù)據(jù)類型是否為主鍵 id整型是 name文本否

55、 4.3.2 數(shù)據(jù)庫(kù)類圖數(shù)據(jù)庫(kù)類圖 類型類型:含有所有的定義類型含有所有的定義類型 實(shí)體實(shí)體:具體的實(shí)體分類具體的實(shí)體分類-游戲、主題、短信、圖片、音樂(lè)。游戲、主題、短信、圖片、音樂(lè)。 評(píng)論:評(píng)論: 用戶:用戶: 4.3.3 持久層的實(shí)現(xiàn)持久層的實(shí)現(xiàn) 我們用hibernate框架實(shí)現(xiàn)應(yīng)用的持久層,封裝訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)細(xì)節(jié),并 向上層提供面向?qū)ο蟮臄?shù)據(jù)訪問(wèn)api。在接下來(lái)的三個(gè)小節(jié),主要分析了如何 創(chuàng)建hibernate框架為我們的應(yīng)用服務(wù)。分為如下三個(gè)步驟: 創(chuàng)建o/r映射文件 創(chuàng)建hibernate配置文件 通過(guò)hibrenate api實(shí)現(xiàn)具體的dao數(shù)據(jù)訪類 4.3.4 o/r映射映射

56、hibernate采用xml格式的文件來(lái)指定對(duì)象和關(guān)系數(shù)據(jù)之間的映射。在應(yīng)用 運(yùn)行時(shí),hibernate將根據(jù)這個(gè)映射文件來(lái)生成各種sql語(yǔ)句,實(shí)現(xiàn)數(shù)據(jù)的訪問(wèn)。 表與表之間的關(guān)聯(lián)關(guān)系通過(guò)xml進(jìn)行配置,然后經(jīng)過(guò)hibernateapi實(shí)現(xiàn)。 4.3.5 dao數(shù)據(jù)訪問(wèn)接口數(shù)據(jù)訪問(wèn)接口 本系統(tǒng)涉及的業(yè)務(wù)對(duì)象有多個(gè),每一個(gè)都映射到一張數(shù)據(jù)庫(kù)表,為了完成 業(yè)務(wù)對(duì)象的持久化,執(zhí)行相應(yīng)的增、刪、改、查操作,所以必須實(shí)現(xiàn)每一個(gè)對(duì) 象的dao類?;谝韵聨c(diǎn)考慮,我們創(chuàng)建了每一個(gè)對(duì)象dao類的接口類 dao: 為了以后功能擴(kuò)展 降低系統(tǒng)實(shí)現(xiàn)之間的相互依賴關(guān)系 業(yè)務(wù)層用spring框架的設(shè)值注入方式綁定bus

57、iness service object和 dao object, business object中的setter方法接受的是接口,這樣便于很松散的 定義對(duì)象實(shí)現(xiàn),然后注入。 考慮到每一個(gè)對(duì)象dao類所需完成功能的相似性,所以可以定義一個(gè)接口超 類, 用以封裝通用的方法定義。 public interface imagedao public image getimage(string id); public list getallimages(); public list getallimages(int page, int pagesize); public void deleteimage

58、(string imageid); 4.3.6 dao數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)實(shí)現(xiàn) 為了實(shí)現(xiàn)代碼的最大復(fù)用和便于以后功能的變更,業(yè)務(wù)對(duì)象dao都繼承自 接口中的dao。transactional可以獲得currentsession。currentsession能為我 們管理session的創(chuàng)建、事務(wù)的啟動(dòng)、提交與回滾。 getxxx()方法提供給調(diào)用者一個(gè)query對(duì)象,它需要調(diào)用者傳入一個(gè)sql語(yǔ) 句的字符串作為參數(shù)。這個(gè)方法調(diào)用的getcurrentsession ()方法獲取 session。 向數(shù)據(jù)庫(kù)中添加記錄是最常見(jiàn)的操作之一。addxxx()實(shí)現(xiàn)了向數(shù)據(jù)庫(kù)中添 加一條對(duì)應(yīng)于一個(gè)業(yè)務(wù)對(duì)象

59、實(shí)例的記錄,它調(diào)用hibernatetemplate的save() 方法實(shí)現(xiàn)。 根據(jù)主鍵查詢唯一數(shù)據(jù)對(duì)象,用getxxxbyid()方法實(shí)現(xiàn)。這個(gè)方法有兩個(gè)參 數(shù):業(yè)務(wù)對(duì)象class和id。根據(jù)需要,id可以是integer型對(duì)象、long型對(duì)象或 string。 updatexxx()方法用于把業(yè)務(wù)對(duì)象的更新持久化到數(shù)據(jù)庫(kù)對(duì)應(yīng)的表中。 deletexxx()方法從數(shù)據(jù)庫(kù)刪除一條對(duì)應(yīng)于一個(gè)業(yè)務(wù)對(duì)象的記錄 findxxxbyname(string name)方法根據(jù)查詢語(yǔ)句查詢數(shù)據(jù)庫(kù)并返回查詢結(jié)果 所包含的業(yè)務(wù)對(duì)象集合 業(yè)務(wù)對(duì)象dao封裝了hibernate的實(shí)現(xiàn)細(xì)節(jié),提供訪問(wèn)接口,供業(yè)務(wù)層調(diào)用

60、。 從上面的分析可以看出,用 hibernate 實(shí)現(xiàn)持久層,使操作變得非常簡(jiǎn)潔,我們 所面對(duì)和操作的是都是具體得業(yè)務(wù)對(duì)象,而讓 hibernate 根據(jù)映射文件去完成和 數(shù)據(jù)庫(kù)表打交道得那部分工作。這也是使用 hibernate 實(shí)現(xiàn)持久層得優(yōu)勢(shì)所在。 4.4 業(yè)務(wù)層的實(shí)現(xiàn)業(yè)務(wù)層的實(shí)現(xiàn) 業(yè)務(wù)層所要做的就是處理來(lái)自表示層的請(qǐng)求、執(zhí)行應(yīng)用邏輯、對(duì)持久層的 調(diào)用、處理事務(wù)、處理異常。本系統(tǒng)涉及到的業(yè)務(wù)邏輯類是由系統(tǒng)的業(yè)務(wù)對(duì)象 決定的。spring框架負(fù)責(zé)把業(yè)務(wù)處理邏輯與所用到的業(yè)務(wù)處理對(duì)象和dao聯(lián)系 起來(lái)以完成相應(yīng)的業(yè)務(wù)處理。 4.4.1 業(yè)務(wù)邏輯處理類的實(shí)現(xiàn)業(yè)務(wù)邏輯處理類的實(shí)現(xiàn) 依據(jù)本系統(tǒng)涉及

溫馨提示

  • 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)論