畢業(yè)設(shè)計(論文)基于SSH的論壇系統(tǒng)設(shè)計_第1頁
畢業(yè)設(shè)計(論文)基于SSH的論壇系統(tǒng)設(shè)計_第2頁
畢業(yè)設(shè)計(論文)基于SSH的論壇系統(tǒng)設(shè)計_第3頁
畢業(yè)設(shè)計(論文)基于SSH的論壇系統(tǒng)設(shè)計_第4頁
畢業(yè)設(shè)計(論文)基于SSH的論壇系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、內(nèi)容摘要論壇的全稱是電子布告系統(tǒng),起初它只是公布信息的一種工具,隨著技術(shù)的不斷發(fā)展,論壇最終發(fā)展成一個信息整合、思想交流、資源共享的電子互動平臺。項目通過spring+hibernate+struts三大框架來架構(gòu)系統(tǒng)。然后,通過總體設(shè)計、詳細設(shè)計和代碼實現(xiàn)的開發(fā)步驟來實現(xiàn)一個通用的論壇系統(tǒng)。在項目的開發(fā)過程中運用了大量的統(tǒng)一建模語言(uml)的知識,本文闡述了整個系統(tǒng)的開發(fā)過程。包括對項目所選用的技術(shù)做簡單介紹,對論壇系統(tǒng)進行需求分析和用例建模,數(shù)據(jù)庫建模、系統(tǒng)業(yè)務(wù)流程分析和設(shè)計、系統(tǒng)分層設(shè)計與實現(xiàn)以權(quán)權(quán)限功能模塊的詳細解析。關(guān)鍵詞: 論壇系統(tǒng)、需求分析、統(tǒng)一建模語言abstractthe

2、full name of the forum is bulletin board system.at first,it just a tool only used for publishing information. as thetechnology keeps evolving all this years,nowadays,the forum has becaming an interactive platform which peoples can share their ideas and resources with each other in there.and also the

3、 forum can help people collecting and ordering all kinds of informations.the structure of this project is established by the three open-source framework which are spring hibernate and struts. when im developing this system i have done the three development steps which are overall design detailed des

4、ign and code implementation.in order to develop this common forum system,i have used a lot of unified modeling language(uml) knowledge.this paper has explains the whole system development process, including doing a brief introduction of the technology which the project has used.and also had done the

5、 work which are system requirements analysis user case modeling database modeling business process analysis and the implementation of the system.key words: forum system、system requirements analysis、uml目 錄1 前言 11.1論壇的發(fā)展現(xiàn)狀 11.2本課題研究簡述11.3論文組織12系統(tǒng)的架構(gòu)技術(shù)與開發(fā)工具 22.1系統(tǒng)的框架技術(shù)22.1.1 spring簡介 22.1.2struts簡介22.1

6、.3 hibernate簡介22.2系統(tǒng)的開發(fā)環(huán)境與開發(fā)工具23 系統(tǒng)的總體設(shè)計 33.1需求分析33.1.1系統(tǒng)的需求用例圖33.2系統(tǒng)的活動流程53.2.1系統(tǒng)的前臺業(yè)務(wù)活動流程53.2.2系統(tǒng)的后臺管理活動流程63.3系統(tǒng)的業(yè)務(wù)流程設(shè)計73.3.1用戶注冊流程設(shè)計 83.3.2會員發(fā)表主題流程設(shè)計 83.4系統(tǒng)的組件結(jié)構(gòu) 93.5系統(tǒng)的數(shù)據(jù)庫設(shè)計 104 系統(tǒng)詳細設(shè)計及代碼實現(xiàn) 134.1系統(tǒng)領(lǐng)域?qū)ο蟮脑O(shè)計134.1.1系統(tǒng)的用戶類圖設(shè)計134.1.2系統(tǒng)的文章相關(guān)的類圖設(shè)計144.1.3系統(tǒng)的論壇分類和論壇版面的類圖154.1.4 代碼實現(xiàn)1642系統(tǒng)的dao層設(shè)計與實現(xiàn)174.2.1

7、 dao層的代碼實現(xiàn)194.3系統(tǒng)的service層設(shè)計224.4系統(tǒng)的web層設(shè)計234.5系統(tǒng)的工具幫助類254.6系統(tǒng)的配置文件簡介264.7系統(tǒng)的運行細節(jié)詳解 264.8權(quán)限控制功能的實現(xiàn)284.8.1系統(tǒng)后臺權(quán)限攔截的實現(xiàn)284.8.2系統(tǒng)前臺權(quán)限攔截的實現(xiàn)295總結(jié)31致謝32參考文獻 33附錄 341前言自20世紀90年代以來,互聯(lián)網(wǎng)飛速發(fā)展,早已成為人們快速發(fā)布、傳遞和獲取信息的重要渠道。它在人們政治、經(jīng)濟、生活、教育、娛樂等各個方面都發(fā)揮著重要的作用。時至今日,面對這樣一個信息爆炸性增長的世紀,論壇作為互聯(lián)網(wǎng)最早的應(yīng)用之一,依然發(fā)揮著它強勁的生命力。1.1論壇的發(fā)展現(xiàn)狀新時期

8、的論壇肩負著更多的使命,高效的信息整合、靈活的溝通方式、有效的知識交流還有資源共享等。論壇正以一種全新的姿態(tài)來到這個新的世紀,它以文字為主要的溝通方式,為網(wǎng)友提供了不受地理位置限制的交流空間。它已經(jīng)成為人與人之間交流的一種形式,它提供一個相互交流、學(xué)習(xí)的互動平臺,能夠?qū)⒎稚⒌男畔⒑头稚⒌闹腔鄱技姓{(diào)動起來,能使得復(fù)雜的事情簡單化。1.2本課題研究簡述如今,論壇幾乎涵蓋了我們生活的各個方面。本系統(tǒng)實現(xiàn)的通用論壇系統(tǒng)就提供了較為全面的論壇功能,用戶可以發(fā)表主題、回復(fù)主題、發(fā)起投票、參與投票、上傳附件、下載附件等,本系統(tǒng)還實現(xiàn)了細粒度的權(quán)限控制功能。此外,本系統(tǒng)的開發(fā)采用了面向?qū)ο蟮姆謱蛹軜?gòu)思想,系

9、統(tǒng)從邏輯上分為四層。領(lǐng)域?qū)嶓w層、dao層、service層以及web層。其中領(lǐng)域?qū)嶓w層是對系統(tǒng)進行領(lǐng)域建模,這個關(guān)聯(lián)著數(shù)據(jù)庫表的設(shè)計,是極為重要的一環(huán)。而dao層則是系統(tǒng)的數(shù)據(jù)邏輯處理,負責(zé)與數(shù)據(jù)庫進行交互。service層負責(zé)系統(tǒng)的業(yè)務(wù)處理邏輯,是系統(tǒng)業(yè)務(wù)功能的抽象實現(xiàn)。web層則主要是指mvc模式中的控制器組件,web層實現(xiàn)獲取用戶用請求、調(diào)用service層處理業(yè)務(wù)邏輯以及最終響應(yīng)用戶請求。因此,系統(tǒng)的擴展性和可移植性都非常良好,可以在不用做太大更改的前提下就可以完成系統(tǒng)的升級或者二次開發(fā)。1.3論文組織本文首先對本系統(tǒng)使用到的技術(shù)和開發(fā)工具做了一個簡述,然后在第三章里給出系統(tǒng)的總體設(shè)計

10、,包括需求分析在內(nèi)。第四章則給出本系統(tǒng)的詳細設(shè)計文檔以及代碼實現(xiàn),最后還對系統(tǒng)的權(quán)限控制功能的實現(xiàn)做詳細介紹,并以一個發(fā)表主題的請求為例子,對系統(tǒng)的運行細節(jié)做了詳細的剖析。2系統(tǒng)的架構(gòu)技術(shù)與開發(fā)工具2.1系統(tǒng)的框架技術(shù)本系統(tǒng)是采用spring、struts、hibernate三大框架來搭建設(shè)計的,下面對這三大框架做簡單介紹。2.1.1 spring簡介spring是rod johnson為解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的,以“不重復(fù)研發(fā)輪子”為理念的,通過與現(xiàn)有的框架無縫地整合來為j2ee應(yīng)用的各層提供解決方案的一個輕量級框架15??刂品崔D(zhuǎn)(ioc)和面向切面(aop)是spring的兩個核心

11、技術(shù),spring通過控制反轉(zhuǎn)來促進松耦合,通過面向切面來實現(xiàn)高內(nèi)聚。spring使用基本的javabean來完成以前只可能由ejb完成的事情。2.1.2 struts簡介struts框架是mvc設(shè)計模式的一個具體實現(xiàn),mvc模式即“模型-視圖-控制器”模式。當(dāng)用戶與相應(yīng)的視圖發(fā)生交互時,視圖將產(chǎn)生一個請求發(fā)送給控制器??刂破魍ㄟ^調(diào)用模型的方法更改其狀態(tài),與此同時,通知所有注冊了的視圖來對用戶界面進行刷新610。2.1.3 hibernate簡介hibernate是一個開源的對象關(guān)系映射框架,它對jdbc進行了輕量級的對象封裝,使得java程序員可以使用面向?qū)ο缶幊趟季S來操縱數(shù)據(jù)庫1115。

12、hibernate一共有5個核心接口,session、sessionfactory、transaction、query和configuration。這5個核心接口在任何開發(fā)中都會用到。22系統(tǒng)的開發(fā)環(huán)境與開發(fā)工具運行環(huán)境: jdk6.0 update13web應(yīng)用服務(wù)器:apache tomcat 6.0集成開發(fā)環(huán)境: eclipse數(shù)據(jù)庫系統(tǒng): mysql5.0單元測試工具: junit界面排版: adobe dreamweaver系統(tǒng)架構(gòu)設(shè)計工具: rational rose、microsoft visio3 系統(tǒng)的總體設(shè)計3.1需求分析本系統(tǒng)根據(jù)權(quán)限的不同,將用戶分為四種參與者,游客、注

13、冊用戶、版主和系統(tǒng)管理員。游客是系統(tǒng)預(yù)設(shè)的一個匿名用戶,擁有回復(fù)主題和參與投票的權(quán)限,游客要想發(fā)表主題就必須注冊為會員。會員除了發(fā)表主題外,還擁有發(fā)起投票,上傳附件的權(quán)限。 每個論壇子版面設(shè)有版主,版主擁有對主題、回復(fù)、投票、附件的管理權(quán)限,默認的版主為系統(tǒng)管理員。由系統(tǒng)管理員統(tǒng)一管理系統(tǒng)后臺,包括論壇分類與版面管理、會員管理、系統(tǒng)配置管理。3.1.1系統(tǒng)的功能需求系統(tǒng)的功能需求從結(jié)構(gòu)上來分為兩大塊,前臺基本業(yè)務(wù)模塊以及后臺管理模塊,兩者相輔相成,共同實現(xiàn)論壇系統(tǒng)的需求。系統(tǒng)的總體需求結(jié)構(gòu)圖如下。圖3.1系統(tǒng)總體需求架構(gòu)圖3.1.2系統(tǒng)的需求用例圖用例是獲取需求的一個便捷有效的方法。通過分析功

14、能需求從而設(shè)計出來的用例圖可以有效的確定需求的范圍。用例圖將系統(tǒng)看成一個黑盒,從外部執(zhí)行者的角度來理解系統(tǒng),通過視圖的方式分析系統(tǒng)所需的功能和動態(tài)行為,從而將系統(tǒng)的功能需求可視化。下面就是對應(yīng)著系統(tǒng)的前臺業(yè)務(wù)模塊和后臺管理模塊的兩張系統(tǒng)需求用例圖,該用例圖盡可能準確的規(guī)定了系統(tǒng)的需求范圍,從而指導(dǎo)系統(tǒng)的開發(fā)。圖3.2 系統(tǒng)后臺管理的用例圖圖3.3 系統(tǒng)前臺用戶業(yè)務(wù)的用例圖3.2系統(tǒng)的活動流程活動圖是用來描述活動是如何協(xié)同工作的。當(dāng)一個操作必須完成一系列事情,而又無法確定以什么樣的順序來完成這些事情時,活動圖可以清晰地描述這些事情。在這里,主要在總體上給出前臺業(yè)務(wù)和后臺管理的活動圖。3.2.1系

15、統(tǒng)的前臺業(yè)務(wù)活動流程 當(dāng)一個用戶鏈接到本論壇系統(tǒng)時,如果該用戶之前設(shè)置了自動登陸,則在通過驗證后即以該用戶之前的身份登陸論壇系統(tǒng)。此外,用戶將以一個游客的身份來到論壇系統(tǒng)。游客可以選擇瀏覽主題回復(fù)主題參與投票下載附件等系統(tǒng)功能,或者選擇登陸系統(tǒng)以獲得更多的功能權(quán)限,如果游客尚未注冊,則可以選擇注冊成為會員之后再登陸系統(tǒng)。登陸之后的普通用戶除游客享有的功能以外,還另外享有發(fā)表主題、發(fā)起投票、上傳附件等常用的系統(tǒng)功能。如果用戶是以版主身份登陸,則除了普通用戶擁有的權(quán)限之外,還擁有管理本論壇貼子的權(quán)限,包括對主題、回復(fù)、附件、投票的管理,前提是該用戶就是該論壇版塊的版主。下面是系統(tǒng)的前臺業(yè)務(wù)活動流程

16、圖。圖3.4 前臺業(yè)務(wù)模塊的活動圖3.2.2系統(tǒng)的后臺管理活動流程在前臺登陸了的用戶,經(jīng)驗證是系統(tǒng)管理員帳號。則可以通過在前臺面頁導(dǎo)航欄上的鏈接來到后臺管理頁面。如果尚未登陸的游客或者不是系統(tǒng)管理員的用戶,直接在瀏覽器的地址欄上鏈接到后臺管理頁面,則系統(tǒng)將拋出權(quán)限不足異常,并且將會取消本次鏈接請求。當(dāng)管理員進入后臺的統(tǒng)一管理頁面,可以通過點擊左側(cè)菜單欄的相關(guān)鏈接來管理系統(tǒng)。包括會員管理、權(quán)限管理、系統(tǒng)配置管理、論壇分類及版面管理等。下面就是系統(tǒng)的后臺管理活動圖。圖3.5后臺管理模塊的活動圖。3.2系統(tǒng)的業(yè)務(wù)流程設(shè)計系統(tǒng)的活動圖從總體上描述了系統(tǒng)的活動狀況,通過活動圖可以搭建系統(tǒng)的活動骨架。然而

17、,活動圖下面的每一個活動都對應(yīng)著系統(tǒng)的一個業(yè)務(wù)功能。通過設(shè)計系統(tǒng)的業(yè)務(wù)流程,才能最后實現(xiàn)系統(tǒng)的整體活動流程。流程圖便是為了這個目的而存在的。本系統(tǒng)的流程圖如若細分,則數(shù)目不少,在此只將最基本的兩個流程圖給出來,分別是用戶注冊流程以及會員發(fā)表主題的流程。3.2.1用戶注冊流程設(shè)計系統(tǒng)通過注冊頁面收集注冊信息,并分別在客戶端和服務(wù)器端校驗注冊信息的有效性,在注冊成功后自動登陸新注冊用戶。流程圖如下。 圖3.6 新用戶注冊流程圖3.2.2會員發(fā)表主題流程設(shè)計當(dāng)用戶鏈接到文章發(fā)表頁面時,系統(tǒng)判斷用戶是否已經(jīng)登陸,如果還沒有,就鏈接到用戶登陸界面,直至用戶登陸后再返回文章發(fā)表面頁。當(dāng)用戶已經(jīng)登陸,輸入文

18、章信息,系統(tǒng)通過客戶端校驗文章信息是否完整,驗證成功后向系統(tǒng)發(fā)送發(fā)表主題的請求。系統(tǒng)收到發(fā)表新主題的請求后,將新主題保存到數(shù)據(jù)庫,請求處理成功后,通過刷新用戶界面信息來響應(yīng)用戶請求。流程圖如下。圖3.7會員發(fā)表文章流程圖3.3系統(tǒng)的組件結(jié)構(gòu)本系統(tǒng)除了由(spring+struts+hibernate)三大框架集成實現(xiàn)的領(lǐng)域?qū)嶓w層、dao層、service層以及web層以外,還包括數(shù)據(jù)庫服務(wù)系統(tǒng)以及用戶界面層。用戶界面層(ui)的設(shè)計也是本系統(tǒng)中重要的一環(huán),本系統(tǒng)的用戶界面包括注冊登陸、瀏覽、發(fā)表主題、發(fā)表回復(fù)、上傳附件、個人信息修改和后臺管理等頁面。本系統(tǒng)的ui設(shè)計都是以相關(guān)的jsp文件以及j

19、s(javascript)文件和css(層疊樣式表文件)文件配合完成。下面給出本系統(tǒng)的組件結(jié)構(gòu)圖。圖3.8 系統(tǒng)的組件圖3.4系統(tǒng)的數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計是整個系統(tǒng)設(shè)計的重要部分,數(shù)據(jù)結(jié)構(gòu)的好壞將直接影響到應(yīng)用系統(tǒng)實現(xiàn)效果和數(shù)據(jù)操作效率以及能否保證數(shù)據(jù)的一致性、完整性和安全性。本系統(tǒng)采用hibernate作為數(shù)據(jù)訪問框架,首先通過設(shè)計良好結(jié)構(gòu)的領(lǐng)域?qū)嶓w類,然后由hbm配置文件來完成對象關(guān)系的映射工作。由hibernate的自動建表技術(shù)來代替設(shè)計數(shù)據(jù)庫表的過程,通過hibernate來自動管理數(shù)據(jù)庫。做為介紹,在這里只給出一個配置文件和三個數(shù)據(jù)庫表。在這里之所以一個配置文件就可以對應(yīng)三個數(shù)據(jù)庫表,

20、正是因為hibernate采用了面向?qū)ο蠼5乃枷?,通過設(shè)計兩個子類繼承一個父類的方式完成數(shù)據(jù)庫表中類似的關(guān)聯(lián)外鍵的功能,這樣設(shè)計不僅能減少數(shù)據(jù)庫設(shè)計中冗余字段,更重要的是,它使得數(shù)據(jù)庫表的結(jié)構(gòu)合理、緊湊。這里給出的領(lǐng)域?qū)嶓w類有文章article、主題 topic、回復(fù) reply,其中article是topic和reply的公共父類。與此相關(guān)的hbm配置文件和數(shù)據(jù)庫表如下(詳細的數(shù)據(jù)庫表可見附錄部分,也可以參閱計算機畢業(yè)設(shè)計網(wǎng))。配置文件片段1/*這里是bbs_article表的映射*/*這里是bbs_topic表的映射*/*這里是bbs_reply表的映射*/hibernate根據(jù)這個映射

21、文件來管理數(shù)據(jù)庫中如下三張表,分別是bbs_article、bbs_topic、bbs_reply。這三張表是論壇的文章、主題和回復(fù)的基本信息的保存,hibernate將根據(jù)實際情況對其進行增加、刪除、修改和查詢。數(shù)據(jù)庫表1 文章表數(shù)據(jù)庫表2 主題表數(shù)據(jù)庫表3 回復(fù)表4 系統(tǒng)詳細設(shè)計及代碼實現(xiàn)4.1系統(tǒng)領(lǐng)域?qū)ο蟮脑O(shè)計系統(tǒng)的領(lǐng)域?qū)ο笠簿褪乔懊嫠f的領(lǐng)域?qū)嶓w類。領(lǐng)域?qū)嶓w類是在功能需求確認的前提下,通過對需求分析、需求用例建模等已有材料和文檔的分析從而抽象出來的領(lǐng)域模型。本系統(tǒng)的領(lǐng)域?qū)ο蟮脑O(shè)計是指pojo(plain ordinary java objects)設(shè)計。pojo通指沒有使用entity

22、 beans的普通java對象,實際就是普通javabeans。pojo通過設(shè)置一些private的參數(shù)作為對象的屬性,然后針對每個參數(shù)定義了get和set方法作為訪問的接口。本系統(tǒng)所編寫的pojo是依據(jù)貧血模型的方式來編寫的,貧血模型是指在pojo中只提供簡單的getter和setter接口來仿問對象的私有屬性,而不提供數(shù)據(jù)邏輯操作接口以及業(yè)務(wù)邏輯處理操作接口。與此同時,本系統(tǒng)的數(shù)據(jù)邏輯操作抽取到了dao層由hibernate中間件來配合實現(xiàn),而業(yè)務(wù)邏輯處理操作則由spring框架負責(zé)實現(xiàn)和管理。此外,類圖設(shè)計做為系統(tǒng)詳細設(shè)計中的最主要的方法之一,最接近代碼實現(xiàn)的最后一個步驟,類圖設(shè)計的結(jié)構(gòu)

23、是否精良是接影響到代碼的編寫質(zhì)量。本文就以設(shè)計類圖為主要的方法來實現(xiàn)系統(tǒng)的詳細設(shè)計16。在本文的類圖設(shè)計中,由于篇幅有限,往往只能給出類的屬性而并沒有給出相應(yīng)的方法。而在這里,對于系統(tǒng)領(lǐng)域?qū)ο蟮念悎D而言,其方法也僅僅是其私有屬性對應(yīng)的get和set方法,所以就不再給出相應(yīng)的方法屬性了。下面就是系統(tǒng)領(lǐng)域?qū)ο蟮念悎D,包括user、group、role、permission、article、topic、reply、vote、attachment、cofig、category、forum等10多個關(guān)鍵的領(lǐng)域?qū)ο螅斍檎埧搭悎D結(jié)構(gòu)。4.1.1系統(tǒng)的用戶類圖設(shè)計本系統(tǒng)統(tǒng)一用一個user類來代表系統(tǒng)的四個擁

24、有不同權(quán)限的參與者。user類通過與group類發(fā)生內(nèi)聚關(guān)系來實現(xiàn)不同身份的轉(zhuǎn)換,一個用戶可以同時屬于幾個不同的群組。而群組group類則是權(quán)限體系的最頂類,group類擁有一個或多個角色role類,而每個role類又擁有一組權(quán)限permission類。permission類是權(quán)限體系的基層類,它是由資源resource類以及動作或者說操作 action類來定義,反過來一個權(quán)限permission類定義了對某一個資源的一個操作權(quán)限。本系統(tǒng)可以通過對group類以及role類的精細設(shè)置來實現(xiàn)多種不同的權(quán)限組,再通過對user用戶類所擁有的權(quán)限組的管理即可完成細粒度很高的權(quán)限設(shè)置和權(quán)限管理功能。整

25、個用戶及權(quán)限體系的之間的關(guān)系,請詳見下面的類圖結(jié)構(gòu)。圖4.1.1 系統(tǒng)的用戶及權(quán)限類圖4.1.2系統(tǒng)的文章相關(guān)的類圖設(shè)計一個論壇,最基本的元素就是文章或者說貼子。在本系統(tǒng)中,文章設(shè)計成是主題和回復(fù)的父類,它們之間的關(guān)系是繼承關(guān)系。其中,文章跟附件、主題跟投票、主題跟回復(fù)之間的關(guān)系是內(nèi)聚關(guān)系,即比如說一個主題可以擁有多個回復(fù)的意思。而投票跟投票選項之間則是組合關(guān)系,即投票是由幾個投票選項組合而成,在本系統(tǒng)中,一個投票最少要由兩個投票選項組成。本系統(tǒng)還設(shè)有一個投票記錄的類來記錄投票的情況,它與投票選項之間是多對多的關(guān)聯(lián)關(guān)系。詳情請看下面的類圖結(jié)構(gòu)。圖4.1.2 系統(tǒng)的文章類圖4.1.3系統(tǒng)的論壇分

26、類和論壇版面的類圖category類代表系統(tǒng)的論壇分類,本生系統(tǒng)可以設(shè)有多個論壇分類。每個論壇分類可擁有多個論壇版面forum。而config類則記錄了整個系統(tǒng)的基本配置信息。它們的類圖結(jié)構(gòu)如下。圖4.1.3系統(tǒng)的論壇分類和論壇版面的類圖4.1.4 代碼實現(xiàn)由于領(lǐng)域?qū)嶓w共有10多個,做為介紹,在這里給出user、forum兩個類的代碼實現(xiàn)。并且由于領(lǐng)域?qū)嶓w類的方法都是類的私有屬性對應(yīng)的get和set方法,在下面的代碼片段中就顯略了相關(guān)的get和set方法。另外,像article類擁有一個對應(yīng)的映射文件一件,每一個領(lǐng)域?qū)嶓w都配有一個hbm配置文件,在這里就不再做介紹。代碼片段1 user類代碼片

27、段public class user implements serializable private static final long serialversionuid = 1l;/ - 基本信息private int id;private string loginname;/ 登錄名private string password;/ 密碼private string email;/ email地址private boolean active = true;/ 是否是活動的(非鎖定)private boolean deleted = false;/ 是否已被刪除private date re

28、gistrationtime;/ 注冊時間private date lastvisittime; / 最后(上次)訪問時間private string lastvisitipaddr; / 最后(上次)訪問時所使用的ip地址private string autologinauthkey;/ 用于自動登陸的一個認證的字符串private string activationkey;/ 鎖定用戶自己激活帳號所用的激活碼private int topiccount;/ 發(fā)表的總主題數(shù)private int articlecount;/ 發(fā)表的總文章數(shù)private set groups = new h

29、ashset(0);/ 所在的組/ - 個人信息private string nickname;/ 昵稱private sex sex = sex.secrecy;/ 性別, 默認為保密private date birthday;/ 生日private byte avatar;/ 頭像private string qq;private string msn;private string comefrom;/ 來自哪里private string signature;/ 簽名代碼片段2 forum類代碼片段public class forum private int id;private str

30、ing name;/ 名稱private string description;/ 描述private int order;/ 顯示順序private int topiccount;/ 總主題數(shù)量private int articlecount;/ 總文章數(shù)量private topic lasttopic;/ 最后發(fā)表的文章private category category;/ 所屬的分類private user webmaster;/版主4.2系統(tǒng)的dao層設(shè)計與實現(xiàn)dao是data access object數(shù)據(jù)訪問接口的意思,就是與數(shù)據(jù)庫打交道,它夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。核心j2e

31、e模式中是這樣介紹dao模式的:為了建立一個健壯的j2ee應(yīng)用,應(yīng)該將所有對數(shù)據(jù)源的訪問操作抽象封裝在一個公共api中。用程序設(shè)計的語言來說,就是建立一個接口,接口中定義了此應(yīng)用程序中將會用到的所有事務(wù)方法。在應(yīng)用程序中,當(dāng)需要和數(shù)據(jù)源進行交互的時候則使用這個接口,并且編寫一個實現(xiàn)類來實現(xiàn)這個接口上對應(yīng)數(shù)據(jù)存儲邏輯。在本系統(tǒng)的dao設(shè)計當(dāng)中,首先,要為本系統(tǒng)中所有的領(lǐng)域?qū)嶓w類都設(shè)計一個對應(yīng)的dao接口,用于聲明數(shù)據(jù)邏輯操作。并且每一個dao接口都對應(yīng)編寫一個實現(xiàn)類來具體實現(xiàn)實體的數(shù)據(jù)邏輯操作。此外,在面向接口編程思想的指導(dǎo)下,設(shè)計一個genericdao接口,抽取所有dao接口的共公方法,讓所

32、有的dao接口都繼承g(shù)enericdao接口。與此同時,編寫一個genericdaoimpl的實現(xiàn)類來實現(xiàn)genericdao接口,并且讓所有的dao接口的實現(xiàn)類都繼承這個父類。另外,本系統(tǒng)由于是通過hibernate和spring的集成來實現(xiàn)dao層,所以genericdaoimpl類除了實現(xiàn)genericdao接口以外,還要繼承spring提供的用于與hibernate集成的一個hibernatedaosuport類,通過繼承hibernatedaosuport類,genericdaoimpl就可以通過獲得spring提供的hibernatetemplate模板類來對相關(guān)的領(lǐng)域?qū)ο筮M行增刪

33、改查等數(shù)據(jù)存取操作了。由于篇幅,下面只給出dao層的接口體系,而不再給出dao層的實現(xiàn)體系,但是dao層的實現(xiàn)體系是嚴格整齊地對應(yīng)著dao層的接口體系的,通過接口體系也就能了解到實現(xiàn)體系了。詳情請看下圖及其注解。圖4.2 dao層的接口體系設(shè)計圖4.2.1 dao層的代碼實現(xiàn)dao層的代碼實現(xiàn)主要是指實現(xiàn)各個領(lǐng)域?qū)ο髮?yīng)的數(shù)據(jù)存取操作,包括對數(shù)據(jù)的增刪改查四種操作,并且這四種操作根據(jù)業(yè)務(wù)的需求往往要提供多種形式的實現(xiàn)方法,特別是查詢操作,比如為了實現(xiàn)分頁的業(yè)務(wù)需求,就必要在提供查詢?nèi)康挠涗浺酝庠偬峁┎樵兎猪摻Y(jié)果數(shù)據(jù)的方法。在本系統(tǒng)的dao層設(shè)計中,起著承前啟后以及框架集成職責(zé)的類便是gene

34、ricdaoimpl這個總接口實現(xiàn)類,它是個抽象類,各個子實現(xiàn)類都繼承于它。各個子實現(xiàn)類在擁有各自獨立的數(shù)據(jù)存取操作的同時,還從genericdaoimpl中繼承了公共的存取操作。只為介紹,下面給出genericdaoimpl類的實現(xiàn)代碼,詳情請看代碼及其注釋部分。代碼片段3 genericdaoimpl類的實現(xiàn)代碼/本類使用了泛型技術(shù),通過泛型,使得每個子類繼承的是各自的領(lǐng)域?qū)ο笞鰹榉盒蛥?shù)的父類public abstract class genericdaoimpl extends hibernatedaosupport implements genericdao /通過log4j插件來實

35、現(xiàn)本系統(tǒng)的日志功能protected static log log = logfactory.getlog(genericdaoimpl.class);/這兩個為泛型參數(shù)相關(guān)屬性,子類通過它們接收父類傳遞過來的泛型參數(shù)類型private final class clazz;private final string entityname;/這是一個注解,spring通過它來為對象動態(tài)注入屬性值resource(name = hibernatetemplate)public final void sethibernatetemplate_0(hibernatetemplate hibernatet

36、emplate) super.sethibernatetemplate(hibernatetemplate);public void flushandclearsession() session session = gethibernatetemplate().getsessionfactory().getcurrentsession();session.flush();session.clear();/為類型參數(shù)賦值public genericdaoimpl() type type = this.getclass().getgenericsuperclass();if (!(type ins

37、tanceof parameterizedtype) throw new bbsexception(沒有傳遞類型參數(shù)t);parameterizedtype pt = (parameterizedtype) type;this.clazz = (class) pt.getactualtypearguments()0;this.entityname = this.clazz.getname();/調(diào)用模版的方法保存實體到數(shù)據(jù)庫public int save(t t) return (integer) gethibernatetemplate().save(getentityname(), t);

38、/通過實體的數(shù)組來批量刪除對應(yīng)的數(shù)據(jù)庫表記錄,先得到實體,再刪除記錄 public void delete(int. ids) if (ids = null | ids.length = 0) return;for (int id : ids) object obj = gethibernatetemplate().get(getentityname(), id);if (obj != null) gethibernatetemplate().delete(getentityname(), obj);/通過實體對象來刪除數(shù)據(jù)庫表記錄public void delete(t t) gethibe

39、rnatetemplate().delete(getentityname(), t);/通過實體對象來更新數(shù)據(jù)庫對應(yīng)的記錄public void update(t t) gethibernatetemplate().update(getentityname(), t);/同樣是更新操作,有同步數(shù)據(jù)庫的功能public void merge(t t) gethibernatetemplate().merge(getentityname(), t);/由hibernate根據(jù)實體的持久狀態(tài)選擇保存還是更新操作public void saveorupdate(t t) gethibernatetem

40、plate().saveorupdate(getentityname(), t);/根據(jù)id查詢數(shù)據(jù)庫,返回一個實體對象public t get(int id) return (t) gethibernatetemplate().get(getentityname(), id);/查找全部的表記錄,返回一個實體鏈表,使用的查詢語言為hibernate提供的數(shù)據(jù)/hql語言,hql語句由hibernate在底層轉(zhuǎn)換為sql語句后再與數(shù)據(jù)庫進行交互public list findall() string querystring = from + getentityname();return get

41、hibernatetemplate().find(querystring);/返回記錄總數(shù)public int gettotal() return findintresult(select count(o) from + getentityname() + o, null);/分頁查詢,返回一個queryresult對象,它記錄了查詢的結(jié)果以及總記錄數(shù)public queryresult findall(int firstresult, int maxresult) string querystring = select count(o) from + getentityname() + o;

42、int total = findintresult(querystring, new object );/ detachedcriteria是由hibernate提供的一個核心查詢類detachedcriteria dc = detachedcriteria.forentityname(getentityname();list items = gethibernatetemplate().findbycriteria(dc, firstresult, maxresult);return new queryresult(total, items);/獲取實體的名字, 默認為持久類的全限定名pro

43、tected string getentityname() return this.entityname;/ 查詢結(jié)果列表中的第一個結(jié)果protected object findfirstresult(detachedcriteria dc) list list = gethibernatetemplate().findbycriteria(dc, 0, 1);return list.size() 0 ? list.get(0) : null;protected int findintresult(string querystring, object value) return findintresult(querystring, new object value );protected int findintresult(string querystring, object values) object result = finduniqueresult(querystring, values);if (result = null) return 0;return (number)

溫馨提示

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

評論

0/150

提交評論