版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科生畢業(yè)論文(設(shè)計)</p><p> 論文題目基于Struts+Spring+Hibernate架構(gòu)的藥品銷售系統(tǒng)研究與實現(xiàn)</p><p> 姓名Xxx</p><p> 部系信息工程學(xué)院</p><p> 專業(yè)信息與計算科學(xué)</p><p> 年級</p><p>
2、 Email</p><p> 聯(lián)系電話Xxx</p><p> 指導(dǎo)教師劉x</p><p> Xxx教務(wù)處制</p><p> 2012年4月2日 </p><p><b> 目 錄</b></p><p><b> 摘 要I</b>
3、</p><p> Abstract....................................................................II</p><p><b> 前 言1</b></p><p><b> 1 系統(tǒng)分析2</b></p><p>
4、 1.1 需求分析2</p><p> 1.2 性能需求2</p><p> 1.3 運行環(huán)境2</p><p> 1.3.1硬件設(shè)備2</p><p> 1.3.2支持程序2</p><p> 2 系統(tǒng)總體框架4</p><p> 2.1 模型結(jié)構(gòu)4</p&g
5、t;<p> 2.2 功能模塊簡介4</p><p><b> 3 技術(shù)介紹6</b></p><p> 3.1 MVC模式簡介.......................................................6</p><p> 3.2 Struts2.x簡介6</p>&
6、lt;p> 3.3 Spring簡介8</p><p> 3.4 Hibernate簡介9</p><p> 4 系統(tǒng)詳細(xì)設(shè)計11</p><p> 4.1 數(shù)據(jù)庫設(shè)計11</p><p> 4.1.1 E-R圖11</p><p> 4.1.2 主要數(shù)據(jù)表12</p>&l
7、t;p> 4.2主要窗體界面12</p><p> 4.2.1首頁界面和后臺首頁12</p><p> 5 藥品銷售系統(tǒng)實現(xiàn)...15</p><p> 5.1 域模型對象15</p><p> 5.2 持久層實現(xiàn)15</p><p> 5.3 業(yè)務(wù)邏輯層實現(xiàn)17</p>&
8、lt;p> 5.4 表現(xiàn)層19</p><p> 5.4.1 視圖層19</p><p> 5.4.2 控制層20</p><p> 5.4.3 模型層......................................................21</p><p><b> 結(jié) 束 語22&l
9、t;/b></p><p><b> 參考文獻(xiàn)23</b></p><p><b> 譯 文24</b></p><p> 譯文原件復(fù)印件31</p><p><b> 致 謝40</b></p><p> 基于Str
10、uts+Spring+Hibernate架構(gòu)的藥品銷售系統(tǒng)</p><p><b> 研究與實現(xiàn)</b></p><p><b> 摘 要</b></p><p> 隨著Internet技術(shù)和企業(yè)信息化建設(shè)的發(fā)展,構(gòu)建基于Web的應(yīng)用系統(tǒng)的需求越來越復(fù)雜,開發(fā)周期越來越緊迫。開發(fā)可擴展性好、重用性高和易于維護(hù)、易管
11、理的Web應(yīng)用是當(dāng)前Web技術(shù)發(fā)展的熱點之一。</p><p> 論文結(jié)合藥品銷售系統(tǒng)多層次體系結(jié)構(gòu)發(fā)展的現(xiàn)狀,探討Struts2.x、Spring、和Hibernate框架。方法 本文以基于J2EE體系的Web開發(fā)方法為探討的基線。首先,從Servlet/Jsp技術(shù)原理,到結(jié)合這兩種技術(shù)進(jìn)行Web開發(fā)的Model 1和Model 2設(shè)計,再到實現(xiàn)Model2的—Struts架構(gòu)內(nèi)部機制進(jìn)行探討;其次,對持久
12、層的設(shè)計進(jìn)行分析,即Hibernate作為持久層實現(xiàn),結(jié)合Spring技術(shù)作為業(yè)務(wù)層實現(xiàn),進(jìn)行框架整合;最后,詳細(xì)論述該框架在藥品銷售系統(tǒng)中的應(yīng)用。結(jié)果 通過實踐表明,應(yīng)用這種系統(tǒng)框架可以提高系統(tǒng)開發(fā)效率,同時滿足系統(tǒng)擴展性和易于維護(hù)性的要求。</p><p> 結(jié)論 Struts+Spring+Hibernate框架在J2EE開發(fā)中有著舉足輕重的地位。</p><p> 關(guān)鍵詞:
13、Struts, Spring, Hibernate , 架構(gòu)</p><p> RESEARCH AND IMPLEMENTATION OF MEDICINESALES MANAGEMENT SYSTEM BASED ON STRUTS, SPRING, HIBERNATE</p><p><b> Abstract</b></p><p&g
14、t; With the Web technology development and the greater demands for application Systems based on Web to meet more complicated requirements, shorter development cycle of software. So the application of Web which has bette
15、r development, maintainability, expansibility, repeatability and easy management, is the hotspot of the Web technology.</p><p> The paper is based on the web development methods of J2EE architecture. Firstl
16、y, introduce the technical principle of Servlet/Jsp, the Model1 and Model 2 design combining Servlet with JSP and the discuss of internal mechanism of Struts2.x architecture which can better implement the Model 2 and so
17、on. Secondly, I applied the Hibernate to the persistence layer, applied the spring framework to the business layer, conformed in framework and constructed a flexible, extensible and high performance dev</p><p&
18、gt; Our study demonstrate that Struts2.x+Spring+Hibernate has important reference value for the J2EE development.</p><p> Key words:Struts, Spring, Hibernate , Architecture</p><p><b>
19、前 言</b></p><p> 隨著Internet的普及,越來越多的企業(yè)建立了自己的WWW網(wǎng)站,企業(yè)通過網(wǎng)站可以展示產(chǎn)品,發(fā)布最新動態(tài)信息,與用戶進(jìn)行交流和溝通,與合作伙伴建立聯(lián)系,以及開展電子商務(wù)等[1]。</p><p> 其中藥品銷售系統(tǒng)是構(gòu)成企業(yè)網(wǎng)站的一個重要組成部分,系統(tǒng)使用java和流行SSH框架開發(fā), 實現(xiàn)了網(wǎng)站動態(tài)管理,使得藥品銷售企業(yè)對信息的管理更加
20、及時、高效,提高了工作效率。該藥品銷售系統(tǒng)具有一般藥品銷售系統(tǒng)的功能,主要包括前臺藥品商城和后臺藥品管理區(qū),可為藥品銷售企業(yè)發(fā)布藥品信息,為藥品銷售企業(yè)提供管理的服務(wù)。</p><p> 該系統(tǒng)是基于B/S(Browser/Server,瀏覽器/客戶端)模式實現(xiàn),基于SSH架構(gòu)開發(fā)設(shè)計,主要實現(xiàn)對藥品銷售企業(yè)的發(fā)布與管理功能,對藥品信息的瀏覽閱讀等。 隨著Internet/Intranet技術(shù)的興起,Web應(yīng)用
21、在信息系統(tǒng)中越來越重要,未來的方向是大量的PC應(yīng)用迅速的向Web遷移,MIS也逐步由C/S模式向B/S模式遷移。目前,電子商務(wù)技術(shù)正以前所未有的發(fā)展速度迅猛發(fā)展。于是,本文基于目前比較流行的J2EE開源框架Struts、Spring、Hibernate技術(shù),構(gòu)建一個基于Web的在線藥品銷售系統(tǒng)。為客戶提供通過互聯(lián)網(wǎng)在線藥品在線查詢的銷售的服務(wù),快捷、方便地滿足客戶的需求。</p><p><b> 1
22、系統(tǒng)分析</b></p><p><b> 1.1 需求分析</b></p><p> 該系統(tǒng)的用戶為藥品銷售企業(yè),每日需要發(fā)布一些最新藥品信息和提供在線購買服務(wù),如何能有效地管理和發(fā)布信息及日常購物產(chǎn)生的信息呢?最初用戶的需求為:“該藥品銷售系統(tǒng)具有一般藥品銷售系統(tǒng)的功能,同時具有管理員對后臺數(shù)據(jù)的處理功能(如新藥品上架、下架和輸入價格及調(diào)整會員價格
23、等)”。</p><p> 根據(jù)藥品銷售系統(tǒng)管理的實際需求,在首頁中能顯示最熱賣的藥品、口碑好的藥品和最新價格等,同時在后臺發(fā)布藥品時可以添加圖片,也可以添加HTML語法,在前臺能自動根據(jù)所顯示的圖片和HTML語法來顯示藥品信息。</p><p> 在后臺管理中,因為有權(quán)限的管理員才能登錄管理后臺,所以需要有商品類型添加模塊、商品添加模塊、管理訂單模塊;在前臺,一般的瀏覽用戶能根據(jù)自己
24、的需要選擇合適的藥品進(jìn)行購買,能返回訂單號等功能模塊。</p><p><b> 1.2性能需求</b></p><p> 該系統(tǒng)在性能功能上應(yīng)達(dá)到如下需求:</p><p> 操作簡單、界面友好,完全控件式的頁面布局,使得藥品的錄入工作更簡便,許多選項包括藥品類型分類、來源廠商、會員價格等只需要點擊鼠標(biāo)就可以完成;另外,跟蹤出現(xiàn)的提示信
25、息也讓用戶隨時清楚自己的操作情況。對常見網(wǎng)站的藥品管理的各個方面:藥品錄入、瀏覽、刪除、修改、搜索等方面都大體實現(xiàn),實現(xiàn)了網(wǎng)站對即時藥品的管理要求;即時可見:對藥品的處理(包括錄入、修改、刪除)將立即在主頁的對應(yīng)欄目顯示出來,達(dá)到“即時發(fā)布、即時見效”的功能;系統(tǒng)運行應(yīng)該快速、穩(wěn)定、高效和可靠;在結(jié)構(gòu)上應(yīng)具有很好的可擴展性,便于將來的功能擴展和維護(hù)。</p><p><b> 1.3 運行環(huán)境<
26、/b></p><p><b> 1.3.1硬件設(shè)備</b></p><p> 客戶機硬件要求:具有 Pentium III 處理器以上且滿足以下要求的計算機:最低 64 MB 內(nèi)存,最小 2.1 GB 硬盤。</p><p> 服務(wù)器硬件要求:具有 Pentium III 處理器以上且滿足以下要求的計算機:最低 256MB 內(nèi)存,
27、最小 8 GB 硬盤。</p><p><b> 1.3.2支持程序</b></p><p><b> 客戶端</b></p><p> 操作系統(tǒng):Windows 98/NT/2000/XP或更高版本</p><p> 瀏覽器:IE 5.0以上或Netscape同等版本以上</p>
28、;<p><b> 服務(wù)器</b></p><p> 操作系統(tǒng):Windows 2000 Server以上</p><p> Web服務(wù)器:Tomcat</p><p> 數(shù)據(jù)庫:MySQL5.0 </p><p><b> 2 系統(tǒng)總體框架</b></p>&
29、lt;p><b> 2.1 模型結(jié)構(gòu)</b></p><p> 該系統(tǒng)的模型結(jié)構(gòu)如圖2-1-1所示:</p><p> 圖2-1-1藥品銷售系統(tǒng)的模型結(jié)構(gòu)圖</p><p> 該系統(tǒng)結(jié)構(gòu)分為三個邏輯層:</p><p> Web 層:Web層為客戶端瀏覽器提供對應(yīng)用程序的訪問,這一層是作為解決方案文件中的
30、 Web 項目實現(xiàn)的。Web 層由JSP組成,Web 視圖層是用 JSP 提供用戶操作,而Struts2.x中Action實現(xiàn)各種控件的事件處理程序[3][5]。</p><p> 業(yè)務(wù)層:包含各種業(yè)務(wù)規(guī)則和邏輯的實現(xiàn),業(yè)務(wù)邏輯利用Spring完成如用戶賬戶的驗證和類型轉(zhuǎn)換這樣的任務(wù)[3][5]。</p><p> 數(shù)據(jù)訪問層:數(shù)據(jù)訪問層為業(yè)務(wù)層提供數(shù)據(jù)服務(wù),這一層是使用Hiberna
31、te進(jìn)行DAO封裝,從而實現(xiàn)面向?qū)ο蟮牟僮鲾?shù)據(jù)庫。</p><p> 2.2 功能模塊簡介</p><p> 藥品銷售系統(tǒng)主要包含用戶管理、藥品類型管理、藥品管理、購物車管理和訂單管理。圖2-2-1列出系統(tǒng)的功能模塊圖:</p><p> 圖2-2-1藥品銷售系統(tǒng)的模型結(jié)構(gòu)圖</p><p><b> 系統(tǒng)工作流程為:<
32、;/b></p><p> 普通用戶或者是管理者進(jìn)入到系統(tǒng)index頁面。</p><p> 根據(jù)自己的角色選擇操作,如普通瀏覽者瀏覽需要的藥品;管理者可以進(jìn)入后臺管理登錄頁面。</p><p> 普通瀏覽者發(fā)現(xiàn)需要購買的藥品,可以進(jìn)入登錄頁面,進(jìn)一步填寫個人信息如個人收貨地址、聯(lián)系電話等。管理者進(jìn)入后臺,可以進(jìn)行商品類型管理、商品管理、訂單管理及用戶管
33、理等。</p><p> 普通瀏覽者或后臺管理員操作完成或需要退出,可以選擇導(dǎo)航條上的“退出”按鈕。 </p><p> 圖2-2-2藥品銷售系統(tǒng)的工作流程圖</p><p><b> 3 技術(shù)介紹</b></p><p> 3.1 MVC模式簡介[1]</p><p> MVC模式即模
34、型—視圖—控制器(model-view-controller)模式,實質(zhì)上,MVC模式是對于GOF的23種設(shè)計模式中一些基本模式的集合和優(yōu)化[4]。MVC模式是目前交互式系統(tǒng)應(yīng)用最廣的一種分層架構(gòu),能很好地實現(xiàn)用戶界面層和業(yè)務(wù)處理層隔離,對代碼進(jìn)行模塊化的劃分,從而使系統(tǒng)中的各個功能模塊之間達(dá)到“解耦”的效果,也很好地遵循OCP原則(Open-Closed Principle)。下面是MVC示意圖:</p><p&g
35、t; 圖3-1-1MVC模式圖</p><p><b> 模型層:</b></p><p> 模型層表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯,主要任務(wù)是執(zhí)行對數(shù)據(jù)的操作,如對數(shù)據(jù)CRUD操作。模型是專門負(fù)責(zé)維護(hù)數(shù)據(jù)的,本身并不能決定這些數(shù)據(jù)對用戶端的表示方法,而是只提供一些對外的接口,這些接口包括取值或改值方法,讓視圖和控制器可以獲得模型的內(nèi)部數(shù)據(jù)或者對其進(jìn)行修改(如圖中的查詢數(shù)
36、據(jù)和修改數(shù)據(jù))。</p><p><b> 視圖層:</b></p><p> 視圖是直接與用戶交互的界面,視圖的主要任務(wù)是表達(dá)數(shù)據(jù)和接受用戶動作,并把動作的請求傳遞給控制器。視圖可以調(diào)用模型提供的取值方法查詢業(yè)務(wù)狀態(tài),但是不能直接改變模型的數(shù)據(jù),視圖接受用戶動作要求改變顯示數(shù)據(jù),必須經(jīng)過控制器,由控制器負(fù)責(zé)調(diào)用對應(yīng)的模型中相應(yīng)方法修改模型中的數(shù)據(jù)。</p&
37、gt;<p><b> 控制器:</b></p><p> 控制器的任務(wù)就是來執(zhí)行動作,即立即處理由視圖接受的各種用戶動作??刂破魇荕VC的中樞系統(tǒng),當(dāng)用戶通過視圖,通過提交請求發(fā)出更新模型指令時,都是通過控制器進(jìn)行的。</p><p><b> MVC的優(yōu)點:</b></p><p> 首先:多個視
38、圖能共享一個模式,從而提高代碼的重用性。</p><p> 其次:三層之間是相互獨立的,當(dāng)軟件需要改動時,能集中于某個層,而不必牽一發(fā)而動全身,因此降低了代碼的耦合性。</p><p> 最后:采用MVC模式思想,能在軟件開發(fā)過程中實現(xiàn)很好的分工,提高開發(fā)效率。</p><p> 3.2 Struts2.簡介[2] [3]</p><p&g
39、t; 對于Struts,大家很熟悉了,它是一個基于MVC的框架,經(jīng)過多年的開發(fā)已經(jīng)變得非常成熟、穩(wěn)定,并為廣大開發(fā)人員所接受,成為了世界上應(yīng)用最廣泛的MVC框架。但是通常所說的Struts是指Struts1.x。Struts1.x框架是以ActionServlet為核心控制器,整個應(yīng)用以客戶端請求驅(qū)動。相對于Struts2.x而言,Struts1.x與JSP/Servlet耦合非常緊密。</p><p> S
40、truts2.x是由另外一個著名的開源框架WebWork發(fā)展而來的。Struts2的設(shè)計思想和核心框架與WebWork是完全一致的,同時它也吸收了Struts1中的一些千錘百煉的優(yōu)點。Struts2是集成Struts1和WebWork兩者設(shè)計思想之優(yōu)點而設(shè)計出來的新一代MVC框架。</p><p> Struts2的工作流程圖如下:</p><p> 圖3-1-2 struts工作流程
41、圖</p><p> Struts2.x框架的工作流程:</p><p> 瀏覽器發(fā)送一個請求。</p><p> 核心控制器FilterDispather根據(jù)Web瀏覽器發(fā)來的請求決定調(diào)用合適的Action。</p><p> 攔截器鏈自動對請求應(yīng)用驗證等通用功能。</p><p> 回調(diào)Action的ex
42、ecute()方法。</p><p> Action的execute()方法執(zhí)行結(jié)果將輸出到瀏覽器中,以多種 返回給Web瀏覽器。</p><p> 3.3 Spring簡介[2] [3][6]</p><p> Spring 框架是一個分層架構(gòu),由 7 個定義良好的模塊組成。Spring 模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方
43、式,如圖 1 所示。 圖3-3-1 Spring組件圖</p><p> 組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)。每個模塊的功能如下: </p><p> 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現(xiàn)。Be
44、anFactory 使用控制反轉(zhuǎn) (IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。 </p><p> Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如 JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。 </p><p> Spring AOP:通過配置管理特性,Spring
45、 AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。 </p><p> Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu)
46、,可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。 </p><p> Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關(guān)系工具,其中包括 JDO、Hibernate 和 iBatis S
47、QL Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。 </p><p> Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web 的應(yīng)用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?</p><p> Sprin
48、g MVC 框架:MVC 框架是一個全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實現(xiàn)。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText 和 POI。 </p><p> 3.4 Hibernate簡介[6]</p><p> Hibernate是采用ORM模式實現(xiàn)數(shù)據(jù)持久層的一個優(yōu)秀Java組件,它對JD
49、BC進(jìn)行了非常輕量級的對象封裝,提供了強大、高效的持久化操作服務(wù),使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate最大的優(yōu)點就在于它能夠使得開發(fā)者能夠像處理Java對象一樣處理持久層的數(shù)據(jù),完成數(shù)據(jù)持久化的重任[10]。</p><
50、p> Hibernate的體系結(jié)構(gòu)如下:</p><p> 圖3-4-1 Hibernate結(jié)構(gòu)圖</p><p><b> 主要部件</b></p><p> SessionFactory: </p><p> 針對單個數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像,它也是線程安全的(不可變)。 它是生成Sessi
51、on的工廠,本身要用到ConnectionProvider。 該對象可以在進(jìn)程或集群的級別上,為那些事務(wù)之間可以重用的數(shù)據(jù)提供可選的二級緩存。 </p><p><b> Session:</b></p><p> 表示應(yīng)用程序與持久儲存層之間交互操作的一個單線程對象,此對象生存期很短。 其隱藏了JDBC連接,也是Transaction的工廠。</p>
52、<p><b> 4 系統(tǒng)詳細(xì)設(shè)計</b></p><p><b> 4.1 數(shù)據(jù)庫設(shè)計</b></p><p> 該系統(tǒng)使用MySQL5.0作為應(yīng)用程序的數(shù)據(jù)庫,建立了有6張數(shù)據(jù)表:admins表存儲管理者信息,commodity表存儲商品信息,commodityclass表存儲商品類型信息, orderform表存儲訂單信
53、息, orderlist表存儲訂單列表信息,uses表存儲用戶信息。</p><p> 4.1.1 E-R圖</p><p> 圖4-1-1-1 E-R圖</p><p> 4.1.2 主要數(shù)據(jù)表</p><p> 在6個數(shù)據(jù)表中,主要介紹管理表和商品類型表及商品表如下:</p><p> 表4-1-2-1
54、 管理者表</p><p> 表4-1-2-2 商品類型表</p><p> 表4-1-2-3 商品表</p><p><b> 4.2主要窗體界面</b></p><p> 4.2.1首頁界面和后臺首頁</p><p> 首頁主要功能是顯示最新藥品信息、購物車,用戶等。</p
55、><p> 圖4-2-1-1(瀏覽首頁)</p><p> 圖4-2-1-2(瀏覽商品細(xì)節(jié)信息)</p><p> 圖4-2-1-3(商品進(jìn)入購物車信息)</p><p> 圖4-2-1-4后臺商品添加頁</p><p> 說明:當(dāng)管理人員進(jìn)入后臺頁面,顯示在當(dāng)前導(dǎo)航條的“商品管理”下拉菜單選項中點擊“商品;錄入
56、”即可以進(jìn)行商品增加錄入功能。</p><p><b> 5藥品銷售系統(tǒng)實現(xiàn)</b></p><p><b> 5.1域模型對象</b></p><p> 持久化對象(也稱域模型對象)與數(shù)據(jù)庫中的表結(jié)構(gòu)一一映射對應(yīng)。在此按照傳統(tǒng)設(shè)計方式來設(shè)計數(shù)據(jù)庫表結(jié)構(gòu)與對象之間的關(guān)系,通過利用MyEclipse工具,從數(shù)據(jù)庫表結(jié)構(gòu)
57、映射為 *.hbm.xml文件和對應(yīng)的POJO類文件(逆向工程)。步驟如下:</p><p> 首先將視圖切換到“MyEclipse Database Explorer Perspective”</p><p> 在”DB Browser”中選中數(shù)據(jù)庫中的”TABLE”項。</p><p> 選擇所要逆向工程的表,右擊“Hibernate Reverse En
58、gineering”。</p><p> 在其后的 Hibernate Mapping and Application Generation 對話框里,選擇Create POJO,和Spring DAO,F(xiàn)inish后,MyEclipse自動生成對應(yīng)的*.hbm.xml文件和對應(yīng)的POJO類文件。</p><p><b> 圖形步驟如下:</b></p>
59、;<p> 圖5-1-1 圖5-1-2</p><p> 圖5-1-3 圖5-1-4</p><p> 5.2 持久層的實現(xiàn)</p><p> 持久層是凡是涉及數(shù)據(jù)庫操作的基礎(chǔ),持久層控制著應(yīng)用程序向數(shù)據(jù)庫的R/W
60、操作。在本系統(tǒng)中利用Hibernate實現(xiàn)這一任務(wù)。向業(yè)務(wù)邏輯層提供DAO接口,具體實現(xiàn)在DAO IMPL中完成。</p><p> 5.2.1 DAO組件接口</p><p> DAO接口定義了DAO組件要實現(xiàn)的方法,但是并為提供具體的實現(xiàn)。利用DAO接口,讓系統(tǒng)中的業(yè)務(wù)邏輯組件面向DAO接口編程,從而達(dá)到業(yè)務(wù)邏輯依賴接口,而非依賴具體的實現(xiàn)類,達(dá)到“解耦”效果。</p>
61、<p> 下面就以商品類型添加DAO接口為例來進(jìn)行說明,下圖5-2-1為針對商品類型添加設(shè)計的commodityClassDAO: </p><p> public interface CommodityClassDAO {</p><p> public void save(CommodityClass commodityclass);//保存商品種類</p&g
62、t;<p> public List<CommodityClass> findAll(Page page);//分頁查詢所有的商品種類</p><p> public int findAllCount();//查詢所有記錄數(shù)</p><p> public List<CommodityClass> findAll();//查詢所有的商品種類<
63、;/p><p> public CommodityClass findByID(int commodityClassID);</p><p><b> }</b></p><p> 5.2.2 實現(xiàn)DAO組件</p><p> DAO組件僅僅有接口沒有提供具體實現(xiàn)方法,無法完成系統(tǒng)實際操作,因此系統(tǒng)還需要實際的DAO
64、實現(xiàn)類用以完成系統(tǒng)實際操作如CRUD(create、retrieve、update、delete)。針對commodityClassDAO,具體實現(xiàn)方法放在commodityClassDAOImpl中。如下所示:</p><p> public class CommodityClassDAOImpl extends HibernateDaoSupport implements CommodityClassDAO
65、{</p><p> public List<CommodityClass> findAll(Page page) {</p><p> Session session = getSession();//獲得session對象</p><p> Query query = session.createQuery("from Commo
66、dityClass");//執(zhí)行查詢</p><p> query.setFirstResult(page.getBeginIndex());//設(shè)置查詢起點位置</p><p> query.setMaxResults(page.getEveryPage());//設(shè)置查詢最大值</p><p> return query.list();/
67、/返回查詢結(jié)果</p><p><b> }</b></p><p> public void save(CommodityClass commodityclass) {</p><p> getHibernateTemplate().save(commodityclass);//保存實體</p><p><
68、b> }</b></p><p> public int findAllCount() {</p><p> List<CommodityClass> commodityClasses = </p><p> getHibernateTemplate().find("from CommodityClass"
69、);//查詢所有記錄</p><p> return commodityClasses .size();//返回記錄數(shù)</p><p><b> }</b></p><p> public List<CommodityClass> findAll() {</p><p> return getHibe
70、rnateTemplate().find("from CommodityClass");</p><p><b> }</b></p><p> public CommodityClass findByID(int commodityClassID) {</p><p> return (CommodityClass)
71、getHibernateTemplate().load(CommodityClass.class, commodityClassID);</p><p><b> }</b></p><p><b> }</b></p><p> 由于篇幅所限,在此以save ( )方法為例。</p><p>
72、; 定義commodityClassDAOImpl類,它繼承Spring的HibernateDaoSupport類。在該類中通過調(diào)用getHibernateTemplate()中的方法來實現(xiàn)。</p><p> Import org.springframework.orm.hibernate3.support.HibernateDaoSupport;</p><p><b>
73、 /*導(dǎo)入包*/;</b></p><p> public class CommodityClassDAOImpl extends HibernateDaoSupport implements CommodityClassDAO /* 繼承HibernateDaoSupport */</p><p> getHibernateTemplate().save(co
74、mmodityclass); /* 調(diào)用模版里的save ( )方法*/</p><p> 5.2.3 配置DAO組件</p><p> 上面的DAO組件是基于Hibernate的持久化操作,必須獲得sessionFactory的引導(dǎo),由于本系統(tǒng)是基于SSH框架的,系統(tǒng)中的DAO組件由Spring容器負(fù)責(zé)管理,系統(tǒng)sessionFactory也由Spring容器來管理。因此DAO組件無
75、須顯示的獲得sessionFactory的引用,由spring容器注入。</p><p> 上面的commodityClassDAOImpl類在spring中的配置如下:</p><p> <bean id="commodityClassDAO" class="com.sanqing.dao.impl.CommodityClassDAOImpl&
76、quot;></p><p> <property name="sessionFactory" ref="sessionFactory"/></p><p><b> </bean></b></p><p> 通過以上的配置后,DAO組件能正常運作。向上能提供業(yè)務(wù)邏輯組
77、件服務(wù),向下能對實體提供持久化操作。</p><p> 5.3 業(yè)務(wù)邏輯層實現(xiàn)</p><p> 業(yè)務(wù)邏輯是整個應(yīng)用程序的核心,接受表現(xiàn)層的請求,控制著應(yīng)用邏輯的流程,并通過持久層來完成數(shù)據(jù)的W/R操作。本系統(tǒng)的業(yè)務(wù)邏輯組件也與持久層一樣采用接口和實現(xiàn)分離的準(zhǔn)則,使業(yè)務(wù)邏輯層接口定義功能,具體的實現(xiàn)由實現(xiàn)類來完成。</p><p> 5.3.1 業(yè)務(wù)邏輯組件接
78、口</p><p> 本系統(tǒng)是按功能模塊來劃分業(yè)務(wù)邏輯組件接口。在此以商品添加模塊為例,商品添加業(yè)務(wù)邏輯接口CommodityService如下圖5-3-1所示。在CommodityService定義了一系列方法,但都沒有提供具體的實現(xiàn)方法。這樣的好處是能夠?qū)崿F(xiàn)依賴接口而不是具體的類,分離組件具體類,達(dá)到解耦效果。</p><p> public interface Commodity
79、Service {</p><p> public void addCommodity(Commodity commodity);//保存商品</p><p> public Result findAllCommodity(Page page);//分頁查詢商品</p><p> public void deleteCommodity(int commodit
80、yID);//按ID刪除商品</p><p> public List<Commodity> queryByRegTime(int num);//按提交時間倒序查找</p><p> public Commodity queryByCommodityID(int commodityID);//按ID查找商品</p><p> public Resu
81、lt queryByCommodityClas(CommodityClass commodityClass,Page page);</p><p><b> }</b></p><p> 5.3.2 業(yè)務(wù)邏輯組件接口實現(xiàn)</p><p> 與持久層一樣,僅僅有業(yè)務(wù)邏輯組件接口依然不能完成實際的業(yè)務(wù)邏輯功能,必須提供相應(yīng)的實現(xiàn)類才能完成實際
82、的業(yè)務(wù)功能。依賴于底層DAO組件提供的持久化操作,業(yè)務(wù)邏輯組件可以更加專注于業(yè)務(wù)邏輯的實現(xiàn),無須理會底層的持久化實現(xiàn)。</p><p> 系統(tǒng)的業(yè)務(wù)邏輯組件依賴于DAO組件,但是這種依賴在SSH架構(gòu)中是一種松耦合的依賴,是接口層次的依賴。因此業(yè)務(wù)邏輯組件并不需要直接定位到DAO組件,無須理會DAO組件的實例化過程。Spring容器負(fù)責(zé)完成DAO組件的實例化,并把DAO組件依賴注入業(yè)務(wù)邏輯組件,從而實現(xiàn)業(yè)務(wù)邏輯組
83、件和DAO組件之間的高層次耦合。</p><p> 商品添加模塊,它向表現(xiàn)層提供CommodityService接口,在CommodityService中定義了一系列方法,但并無實現(xiàn)體,具體實現(xiàn)通過CommodityServiceImpl類來完成。以商品錄入提交方法為例,其流程圖如下圖5-3-2:</p><p> 圖5-3-2 商品錄入流程圖</p><p>
84、 商品錄入實現(xiàn)類中定義了addcommodity ( )方法,通過Spring容器動態(tài)注入,實現(xiàn)save、delete功能。在此使用常見的設(shè)置注入法(set方法)。代碼如下所示:</p><p> public class CommodityServiceImpl implements CommodityService</p><p><b> {</b><
85、;/p><p> private CommodityDAO commodityDAO;//注入數(shù)據(jù)訪問層</p><p> public void setCommodityDAO(CommodityDAO commodityDAO) </p><p><b> {</b></p><p> this.commodit
86、yDAO = commodityDAO;//設(shè)置數(shù)據(jù)訪問層</p><p><b> }</b></p><p> public void addCommodity(Commodity commodity) </p><p><b> {</b></p><p> commodityDAO.
87、save(commodity);//完成數(shù)據(jù)保存</p><p><b> }</b></p><p><b> }</b></p><p> 5.3.3 業(yè)務(wù)邏輯組件配置</p><p> 配置業(yè)務(wù)邏輯組件需要將上面的業(yè)務(wù)邏輯組件實現(xiàn)類部署到Spring容器中,因為業(yè)務(wù)邏輯組件依賴DAO組
88、件,所以還要在此配置所依賴的DAO組件。下面是配置片段代碼:如下所示:</p><p> <bean id="commodityService" class="com.sanqing.service.impl.CommodityServiceImpl"></p><p> <property name="commodi
89、tyDAO" ref="commodityDAO"/></p><p><b> </bean></b></p><p> 5.3.4 事務(wù)管理</p><p> Spring容器中配置了業(yè)務(wù)邏輯組件后,還要為業(yè)務(wù)邏輯方法增加事物控制。由于用戶的業(yè)務(wù)邏輯方法對應(yīng)用戶的一次業(yè)務(wù)請求,通常而言,
90、用戶的每次業(yè)務(wù)請求都是邏輯不可分的,所以要增加事物控制。</p><p> 在本系統(tǒng)中的事物控制采用Spring的DefaultAdvisorAutoProxyCreator事物代理方式,此代理生成器自動搜索Spring容器中的Advisor,并為容器中的bean創(chuàng)建代理。代碼如下所示:</p><p> <!-- 配置事務(wù)管理器 --></p><p
91、> <bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"></p><p> <property name="sessionFactory"><ref local=&qu
92、ot;sessionFactory"/></p><p> </property></p><p><b> </bean></b></p><p> <!-- 配置事務(wù)特性 --> </p><p> <tx:advice id="
93、txAdvice" transaction-manager="transactionManager"></p><p> <tx:attributes></p><p> <tx:method name="*" propagation="REQUIRED"/></p>&l
94、t;p> </tx:attributes></p><p> </tx:advice></p><p><b> 5.4表現(xiàn)層</b></p><p><b> 5.4.1視圖層</b></p><p> 首先,介紹下前臺主頁面(代碼如下所示):</p&
95、gt;<p> <%@ page language="java" import="java.util.*" pageEncoding="GBK"%></p><p> <%@ taglib prefix="s" uri="/struts-tags" %></p>
96、<p><b> <%</b></p><p> String path = request.getContextPath();</p><p> StringbasePath= request.getScheme()+"://"+request.getServerName()+":"+request.
97、getServerPort()+path+"/";</p><p><b> %></b></p><p> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/x
98、html1-transitional.dtd"></p><p> <html xmlns="http://www.w3.org/1999/xhtml"></p><p><b> <head></b></p><p> <meta http-equiv="Con
99、tent-Type" content="text/html; charset=gbk" /></p><p> <title>陽光導(dǎo)藥購物網(wǎng)</title></p><p> <link rel="stylesheet" type="text/css" href="sty
100、le.css" /></p><p> <!--[if IE 6]></p><p> <link rel="stylesheet" type="text/css" href="iecss.css" /></p><p> <![endif]-->&
101、lt;/p><p> <script type="text/javascript" src="js/boxOver.js"></script></p><p><b> </head></b></p><p> 以上是頁面的部分代碼:</p><p
102、> ?。?)在index.jsp的第二行,通過<%@ taglib prefix=”s” uri=”/struts-tags” %>來指明引人Struts標(biāo)簽庫;</p><p> ?。?)此外在index.jsp的開始部分定義了頁面語言屬性(pageEncoding=”GBK”),在<link />中定義樣式和<script />引人JavaScript。</p
103、><p> 其次,接下來介紹后臺主頁面:</p><p> <LI><A href="include/commodityClass/commodityClassAdd.jsp" target="frmright">新增商品種類</A> </LI></p><p> <LI
104、><A href="findAllCommodityClass.action" target=frmright>商品種類列表</A> </LI></p><p> <LI><A href="addCommodityPage.action" target=frmright>商品錄入</A> <
105、;/LI></p><p> <LI><A href="findAllCommodity.action" target=frmright>商品列表</A> </LI></p><p> 以上是頁面的部分代碼:</p><p> 在后臺的index.jsp頁面中,是以超鏈的形式來指引到對應(yīng)
106、的JSP頁面和對應(yīng)的Action相應(yīng)的如<A href="addCommodityPage.action"/>。</p><p><b> 5.4.2控制層</b></p><p> 為了能更好的說明本系統(tǒng)中Struts2控制層的工作流程,先在此簡單介紹Struts2工作執(zhí)行步驟,Struts2的執(zhí)行步驟為:</p>
107、<p> 首先相應(yīng)請求的是web.xml文件中的配置過濾器—FilterDispather。</p><p> 依據(jù)Struts2的配置文件—Struts.xml來找到應(yīng)該響應(yīng)用戶請求的*Action。執(zhí)行Action中的處理方法—execute()。返回<action>元素中配置的返回頁面或者處理結(jié)果。</p><p> 下面以商品錄入為例,</p>
108、;<p> struts.xml配置文件部分內(nèi)容:</p><p> <action name="addCommodityPage" class="commodityAddtAction" method="addBefore"></p><p> <result name="succ
109、ess">/admin/include/commodity/commodityAdd.jsp</result></p><p><b> </action></b></p><p> Struts2框架使用包來管理Action和攔截器,每一個包能包含(放入)多個Action、多個攔截器或者是攔截器棧。在上面的例子中 name
110、的值要和對應(yīng)的JSP頁面上超鏈或者表單一致。否則在執(zhí)行過程會彈出404錯誤等信息。在result的name值即為跳轉(zhuǎn)響應(yīng)頁面,可以是常量,也可以是JSP頁面。</p><p><b> 5.4.3模型層</b></p><p> 在此還是以商品錄入為例,commodityAddAction類如下:</p><p> public clas
111、s CommodityAddAction extends ActionSupport {</p><p> private CommodityClassService commodityClassService;// 業(yè)務(wù)邏輯層</p><p> private List<CommodityClass> commodityClasses;// 商品種類列表</p>
112、;<p> private CommodityService commodityService;//商品業(yè)務(wù)邏輯組件</p><p> private CommodityClass commodityClass;//商品種類</p><p> private Integer commodityClassID;//商品種類編號</p><p>
113、; private String commodityName;//商品名稱</p><p> private String manufacturer;//生產(chǎn)廠家</p><p> private String commodityDepict;//商品描述</p><p> private Double commodityPrice;
114、//商品價格</p><p> private Double fcPrice;//商城價格</p><p> private Integer commodityAmount;//商品總數(shù)量</p><p> private File uploadImage;//上傳圖片文件</p><p> private S
115、tring uploadImageContentType;//上傳圖片文件類型</p><p> private String uploadImageFileName;//上傳圖片文件名</p><p> public String execute() throws Exception {</p><p> Commodity commodity =
116、 new Commodity();//實例化一個商品信息對象</p><p> commodity.setCommodityClass</p><p> (new CommodityClass(commodityClassID));//設(shè)置商品分類</p><p> commodity.setCommodityDepict(commodityDepict)
117、;//設(shè)置商品描述</p><p> commodity.setCommodityLeaveNum(commodityAmount);//設(shè)置商品剩余數(shù)量</p><p> commodity.setCommodityAmount(commodityAmount);//設(shè)置商品總數(shù)量</p><p> commodity.setCommodityPrice(c
118、ommodityPrice);//設(shè)置商品價格</p><p> commodity.setFcPrice(fcPrice);//設(shè)置商城價格</p><p> commodity.setManufacturer(manufacturer);//設(shè)置生成廠家</p><p> commodity.setCommodityName(commodityName);
119、//設(shè)置商品名稱</p><p> commodity.setRegTime(new Date());//設(shè)置商品上架時間</p><p> File file = getUploadImage();</p><p> 首先,commodityAddActiont繼承ActionSupport類,在此類中有一些屬性和get/set方法。并且覆蓋里面的execu
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計----藥品銷售數(shù)據(jù)管理系統(tǒng)的設(shè)計與實現(xiàn)
- 采集與發(fā)射系統(tǒng)設(shè)計畢業(yè)設(shè)計(含外文翻譯)
- 網(wǎng)絡(luò)考試系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 供配電系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 畢業(yè)設(shè)計--多媒體教學(xué)的設(shè)計與實現(xiàn)(含外文翻譯)
- 自動稱重系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 教務(wù)管理系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 教務(wù)管理系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 煤礦畢業(yè)設(shè)計(含外文翻譯)
- 采煤畢業(yè)設(shè)計(含外文翻譯)
- 公路畢業(yè)設(shè)計(含外文翻譯)
- 逆變器畢業(yè)設(shè)計(含外文翻譯)
- 換熱器畢業(yè)設(shè)計(含外文翻譯)
- 液壓畢業(yè)設(shè)計(含外文翻譯)
- 橋梁畢業(yè)設(shè)計(含外文翻譯)
- 畢業(yè)設(shè)計---校友錄系統(tǒng)(含外文翻譯)
- 畢業(yè)設(shè)計--基于epon+eoc技術(shù)的寬帶接入系統(tǒng)研究與設(shè)計(含外文翻譯)
- 基于c_實現(xiàn)的郵件管理系統(tǒng)畢業(yè)設(shè)計(含外文翻譯)
- 畢業(yè)設(shè)計--餐廳點菜系統(tǒng)(含外文翻譯)
- 橋梁畢業(yè)設(shè)計(含外文翻譯)
評論
0/150
提交評論