基于JAVA的購(gòu)物網(wǎng)站(畢業(yè)論文)_第1頁(yè)
基于JAVA的購(gòu)物網(wǎng)站(畢業(yè)論文)_第2頁(yè)
基于JAVA的購(gòu)物網(wǎng)站(畢業(yè)論文)_第3頁(yè)
基于JAVA的購(gòu)物網(wǎng)站(畢業(yè)論文)_第4頁(yè)
基于JAVA的購(gòu)物網(wǎng)站(畢業(yè)論文)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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)介

南南昌航空大學(xué)科技學(xué)院2016屆學(xué)士學(xué)位論文

引言

自從B2C購(gòu)物出現(xiàn)在人們的視野中,電子商務(wù)就在全世界范圍內(nèi)受到了格外的關(guān)注,并且得到了快速的發(fā)展。從現(xiàn)實(shí)角度來(lái)看,目前購(gòu)物網(wǎng)站的普遍用戶是購(gòu)買者難以自己想要購(gòu)買的商品甚至用戶在耗費(fèi)很大的精力和時(shí)間后即使找到了自己想要的產(chǎn)品,最后卻由于其他原因而放棄購(gòu)買。很多報(bào)道指出,推銷商們普遍對(duì)目前的網(wǎng)絡(luò)行銷感到失望,盡管如此,電子商務(wù)無(wú)疑是目前最好的在線商品展示的媒體和工具。然而,網(wǎng)上產(chǎn)品展示的目的不僅僅是展示產(chǎn)品,而更重要的是通過(guò)讓客戶更多地了解產(chǎn)品而提高產(chǎn)品的購(gòu)買率。因此,購(gòu)物網(wǎng)站目前所面臨的最大挑戰(zhàn)之一就是網(wǎng)站的設(shè)計(jì),如何使得網(wǎng)頁(yè)能夠有效地展示自己的產(chǎn)品,同時(shí)方便用戶的使用,使用戶以愉悅的心情選購(gòu)稱心如意的商品。本系統(tǒng)的目的和意義就是應(yīng)上述挑戰(zhàn)而嘗試為用戶提供一個(gè)操作簡(jiǎn)單方便的網(wǎng)上交易系統(tǒng)。利用本系統(tǒng),用戶可以自由地瀏覽商品,注冊(cè)成為網(wǎng)站會(huì)員,選擇商品加入自己的購(gòu)物車,而后生成訂單,實(shí)現(xiàn)網(wǎng)上購(gòu)物。

2

系統(tǒng)應(yīng)用的關(guān)鍵技術(shù)2.1

EXTJSMVC的介紹ExtJs前臺(tái)我分為了model,store,view,controller層4層架構(gòu),對(duì)于model層,用于接收后臺(tái)傳入的Pojo封裝成前臺(tái)數(shù)據(jù)Model中,創(chuàng)建一個(gè)model需要define的一個(gè)繼承于Ext.data.Model的一個(gè)類,其中關(guān)鍵不可少的配置項(xiàng)是fields,例如fields:[{name:"id",type:"int",srotable:true},{name:"text",type:"string",srotable:true}]其中name代表字段名稱,type為字段類型,類型只有string、float、int、boolean、date、auto(默認(rèn)值,意味著無(wú)convert方法)6種對(duì)應(yīng)后臺(tái)pojo,形成一條數(shù)據(jù),而stroe層則是數(shù)據(jù)集合,也就是model的集合。開發(fā)時(shí)我們經(jīng)常是用代理的方式從后臺(tái)獲取一條json數(shù)據(jù),形成stroe,如proxy:{type:"ajax", url:"./category/combo_category.do", reader:{ type:"json", root:"rows" }, writer:{ type:"json" } }是用ajax的代理方式從后臺(tái)獲取一個(gè)數(shù)據(jù)集,stroe還得指定你使用的model是那個(gè),model配置項(xiàng)就可以指定你要指定的Model類,用字符串的形式寫上類名即可配置好stroe.這時(shí)候搭建主面板視圖,主面板是一個(gè)border布局,上方是login信息以及系統(tǒng)名稱,左邊屬性圖,中部是數(shù)據(jù)表格以及一些表單。完成的mvc架構(gòu)還需要controller層,這時(shí)候我們要先建立一個(gè)app.js,內(nèi)容如下:一顆樹,通過(guò)前面定義的加入新的視圖和控制器的方法來(lái)加載不同的頁(yè)面都需要傳入樹的節(jié)點(diǎn)信息。2.4數(shù)據(jù)庫(kù)的連接本系統(tǒng)數(shù)據(jù)庫(kù)的連接使用的MyBatis框架的數(shù)據(jù)連接,用配置文件配置數(shù)據(jù)庫(kù)連接屬性,本次我沒有使用外部屬性文件,而是直接使用配置的固定參數(shù),先配置一個(gè)數(shù)據(jù)源 dataSource,讓他直接指向類org.springframework.jdbc.datasource.DriverManagerDataSource,配置參數(shù)driverClassName的value為com.mysql.jdbc.Driver,url為jdbc:mysqlL..localhost:3306/lzl?characterEcoding=utf-8&useUnicode=true在配置數(shù)據(jù)庫(kù)訪問賬號(hào)密碼,這樣我們就和數(shù)據(jù)庫(kù)連接上了。2.5系統(tǒng)的運(yùn)行環(huán)境本系統(tǒng)前端使用mvc模式的ExtJS4.1后臺(tái)使用springmvc,spring,mybatis整合,使用的服務(wù)器是tomcat7.0,在eclipse編譯器下運(yùn)行即可,操做系統(tǒng)

Windows

7,在火狐瀏覽器下進(jìn)行測(cè)試.2.6springmvc工作流程

1.用戶向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求被Spring前端控制ServeltDispatcherServlet捕獲;

2.

DispatcherServlet對(duì)請(qǐng)求URL進(jìn)行解析,得到請(qǐng)求資源標(biāo)識(shí)符(URI)。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對(duì)象(包括Handler對(duì)象以及Handler對(duì)象對(duì)應(yīng)的攔截器),最后以HandlerExecutionChain對(duì)象的形式返回;

3.

DispatcherServlet根據(jù)獲得的Handler,選擇一個(gè)合適的HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時(shí)將開始執(zhí)行攔截器的preHandler(...)方法)

4.

提取Request中的模型數(shù)據(jù),填充Handler入?yún)?,開始執(zhí)行Handler(Controller)。在填充Handler的入?yún)⑦^(guò)程中,根據(jù)你的配置,Spring將幫你做一些額外的工作:

HttpMessageConveter:將請(qǐng)求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對(duì)象,將對(duì)象轉(zhuǎn)換為指定的響應(yīng)信息

數(shù)據(jù)轉(zhuǎn)換:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換。如String轉(zhuǎn)換成Integer、Double等

數(shù)據(jù)根式化:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)格式化。如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等

數(shù)據(jù)驗(yàn)證:驗(yàn)證數(shù)據(jù)的有效性(長(zhǎng)度、格式等),驗(yàn)證結(jié)果存儲(chǔ)到BindingResult或Error中

5.

Handler執(zhí)行完成后,向DispatcherServlet

返回一個(gè)ModelAndView對(duì)象;

6.

根據(jù)返回的ModelAndView,選擇一個(gè)適合的ViewResolver(必須是已經(jīng)注冊(cè)到Spring容器中的ViewResolver)返回給DispatcherServlet

;

7.

ViewResolver結(jié)合Model和View,來(lái)渲染視圖

8.將渲染結(jié)果返回給客戶端。2.7spring依賴注入,控制反轉(zhuǎn)IoC,即控制反轉(zhuǎn)。他使程序組件或類之間盡量形成一種松耦合結(jié)構(gòu),開發(fā)者在使用類的實(shí)例之前,需要先創(chuàng)建對(duì)象的實(shí)例。但是IoC將創(chuàng)建實(shí)例的任務(wù)交給IoC容器,這樣開發(fā)應(yīng)用代碼時(shí)只需要直接使用類的實(shí)例,這就是IoC。通常用一個(gè)好萊塢原則(請(qǐng)不要打電話給我,我會(huì)打電話給你。)來(lái)比喻這種控制反轉(zhuǎn)的關(guān)系。依賴注入有3種類型注入,spring支持2種,setter注入和構(gòu)造器注入,在項(xiàng)目中我使用的是注解方式的注入,在配置文件中配置了com.lzl包下的類自動(dòng)注入到容器中,在我們需要用到這些類的時(shí)候,我們只需聲明該類,然后使用一個(gè)@autowired注入想要使用的類,其中控制器我們使用的Controller注解標(biāo)識(shí)為控制器,業(yè)務(wù)邏輯層我們使用的service注解。這樣spring容器就能管理好我們的類。2.8springAOP3系統(tǒng)需求分析和總體設(shè)計(jì)3.1

系統(tǒng)功能需求在本系統(tǒng)中用戶管理、購(gòu)物車管理、訂單管理、產(chǎn)品展示,商品管理,廣告管理六個(gè)模塊。分為前臺(tái)展示項(xiàng)目和后臺(tái)管理項(xiàng)目。(1)購(gòu)物車管理:實(shí)現(xiàn)添加商品、取消一個(gè)商品、數(shù)量修改、清空購(gòu)物車功能。(2)訂單管理:實(shí)現(xiàn)提交訂單、刪除訂單、查詢訂單、訂單審核功能。(3)前臺(tái)展示:實(shí)現(xiàn)產(chǎn)品列表、產(chǎn)品明細(xì)功能。(4)用戶管理:實(shí)現(xiàn)用戶注冊(cè)、用戶信息修改、用戶刪除、用戶查詢功能。(5)商品管理:實(shí)現(xiàn)對(duì)商品的添加,對(duì)商品信息的修改,對(duì)商品的刪除。以及按類別查詢商品,按名稱查詢商品功能。(6)廣告管理:對(duì)主頁(yè)面廣告部分的管理,實(shí)現(xiàn)廣告的動(dòng)態(tài)化,頁(yè)面廣告信息的更新。3.2

系統(tǒng)角色及其功能分析3.2.1

系統(tǒng)中有3個(gè)角色:(1)注冊(cè)用戶(2)管理員

(3)游客3.2.2

系統(tǒng)角色的功能(1)普通用戶網(wǎng)站的普通瀏覽者(即游客),可以瀏覽商品和添加本地購(gòu)物車。(2)注冊(cè)用戶普通瀏覽者只要注冊(cè)為網(wǎng)站用戶后,登錄成功后有以下功能:登錄,登出,向購(gòu)物車中添加商品,查看個(gè)人信息,生成并提交訂單。添加或修改個(gè)人明細(xì)資料。(3)管理員登錄成功后,進(jìn)入后臺(tái)項(xiàng)目,對(duì)前臺(tái)展示的動(dòng)態(tài)管理,以及用戶商品等管理,對(duì)訂單的審核。3.3

總體設(shè)計(jì)思想概述

本系統(tǒng)是基于B/S架構(gòu)下的多層結(jié)構(gòu)應(yīng)用系統(tǒng)。B/S(Browser/Server)結(jié)構(gòu)即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過(guò)WWW瀏覽器來(lái)實(shí)現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn),形成所謂三層3-tier結(jié)構(gòu)。這樣就大大簡(jiǎn)化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級(jí)的成本和工作量,降低了用戶的總體成本(TCO)。在軟件體系架構(gòu)設(shè)計(jì)中,分層式結(jié)構(gòu)是最常見,也是最重要的一種結(jié)構(gòu)。推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問(dao)層、業(yè)務(wù)邏輯層、表示層總的來(lái)說(shuō),采用分層結(jié)構(gòu)的設(shè)計(jì)思想,可以讓每個(gè)層由一組相關(guān)的類或組件構(gòu)成,共同完成特定的功能。層與層之間存在自上而下的依賴關(guān)系,上層組件會(huì)依賴下層組件的API,而下層組件則不依賴于上層組件。例如:表述層依賴于業(yè)務(wù)邏輯層,而業(yè)務(wù)邏輯層依賴于數(shù)據(jù)庫(kù)層。并且每個(gè)層對(duì)對(duì)上層公開API,但具體的實(shí)現(xiàn)細(xì)節(jié)對(duì)外透明。當(dāng)某一層發(fā)生變化,只要API不變,不會(huì)影響其他層的實(shí)現(xiàn)。在本系統(tǒng)中,使用開源的mysql數(shù)據(jù)庫(kù),持久層用到spring所集成的mybatis技術(shù),業(yè)務(wù)邏輯層用普通javabean實(shí)現(xiàn),表述層運(yùn)用基于springmvc的MVC設(shè)計(jì)模式(springmvc用來(lái)做C層,spring實(shí)現(xiàn)V層與C層的解耦以及C層與M層的解耦)。3.4

數(shù)據(jù)庫(kù)設(shè)計(jì)圖3-1數(shù)據(jù)庫(kù)E-R3.4.2數(shù)據(jù)庫(kù)表設(shè)計(jì)下面列出了設(shè)計(jì)過(guò)程中所用到的數(shù)據(jù)庫(kù)表及其結(jié)構(gòu):

表3-1lzl_quser前臺(tái)用戶表列名類型長(zhǎng)度允許空值描述idint11不允許主鍵usernamevarchar255不允許用戶名passwordvarchar255不允許密碼emailvarchar255允許郵箱地址qqvarchar255允許qq號(hào)碼phonevarchar255允許電話號(hào)碼sexvarchar255允許性別xlvarchar255允許學(xué)歷ahvarchar255允許愛好jjvarchar255允許簡(jiǎn)介表3-2lzl_user管理用戶表列名類型長(zhǎng)度允許空值描述idvarchar11不允許主鍵usernamevarchar255不允許用戶名passwordvarchar255不允許密碼sexint11允許性別phonevarchar155允許電話號(hào)碼qqvarchar255允許qqaddrvarchar255允許地址emailvarchar255允許郵箱地址表3-3lzl_product商品表列名類型長(zhǎng)度允許空值描述idint11不允許主鍵namevarchar255允許商品名descvarchar255允許描述norma_Pricedouble11允許社會(huì)價(jià)格member_Pricedouble11允許本店價(jià)格pdatetimestamp0允許上貨日期category_idint11允許所屬類型photovarchar255不允許圖片地址表3-4lzl_cartItem購(gòu)物車表列名類型長(zhǎng)度允許空值描述idint11不允許主鍵product_idint11不允許商品idproduct_namevarchar255允許商品名稱countint11允許商品數(shù)量pricedouble11允許商品單價(jià)quser_idint11不允許用戶idstateint11允許當(dāng)前狀態(tài)imagepathvarchar255允許商品圖片3.5

系統(tǒng)的類設(shè)計(jì)3.5.1

DAO類設(shè)計(jì)通過(guò)這個(gè)mybatis獲取對(duì)應(yīng)的DAO,然后使用DAO進(jìn)行數(shù)據(jù)庫(kù)操作,每個(gè)dao對(duì)應(yīng)一個(gè)Mapper配置文件,進(jìn)行Sql的配置,在本系統(tǒng)中,dao的一般使用都使用了BaseProvice類,根據(jù)約定實(shí)體用@param(“entity”)標(biāo)識(shí),分頁(yè)參數(shù)用@param(“pageNum”)和@param(“pageSize”)標(biāo)識(shí),這樣就能友好的被讀取,按照約定還有實(shí)體中的其他對(duì)象屬性要用@ObjectAlt注解標(biāo)志,集合用@ArrayAlt標(biāo)志,這樣的標(biāo)識(shí)都可以方便我們更好的識(shí)別其屬性到底是個(gè)什么類型,其次做條件查詢時(shí),是用entity標(biāo)識(shí)的實(shí)體中有不為空的屬性且不為空字符串時(shí)就會(huì)被and連接,保存也是實(shí)體中不為空的屬性都會(huì)進(jìn)行保存,主鍵必須為空,數(shù)據(jù)庫(kù)進(jìn)行主鍵的自動(dòng)增長(zhǎng)3.5.2

JacksonUtil類設(shè)計(jì)本類中實(shí)現(xiàn)了一個(gè)mapToJson方法,參數(shù)為一個(gè)Object的對(duì)象。返回值為一個(gè)String類型的json對(duì)象,本類可以將對(duì)象或者集合傳化為JSON格式的字符串,用的是JackSonJar包。3.5.3ObjectAlt注解類設(shè)計(jì)用@Target(ElementType.FIELD)標(biāo)識(shí)表示可以使用在屬性上,在使用@Retention(RetentionPolicy.RUNTIME)在運(yùn)行時(shí)檢測(cè),最后方法中聲明一個(gè)Stringvalue(),本類用來(lái)標(biāo)識(shí)實(shí)體類中的對(duì)象屬性。3.6系統(tǒng)的用例圖Customerer瀏覽商品注冊(cè)登錄購(gòu)物車管理Customerer瀏覽商品注冊(cè)登錄購(gòu)物車管理訂單操作修改信息添加修改刪除圖3-2總體用例分析1AAdmin商品管理廣告管理角色管理用戶管理圖3-3

總體用例分析2如圖3-3,用戶管理、購(gòu)物車管理、訂單管理、產(chǎn)品展示,廣告管理,商品管理6個(gè)模塊構(gòu)成了本b2c購(gòu)物網(wǎng)站系統(tǒng)。User是指系統(tǒng)用戶,包括注冊(cè)用戶和匿名用戶兩種,匿名用戶只可以瀏覽商品,匿名用戶通過(guò)用戶管理模塊注冊(cè)后就可以使用購(gòu)物車和下訂單。展示用戶展示用戶AdminAdmin用戶登錄錄用戶登錄錄信息修改信息修改添加新用戶添加新用戶圖3-4

用戶管理用例如圖3-4,用戶管理模塊主要包括:用戶登陸、用戶注冊(cè)、用戶信息修改、用戶刪除、用戶信息查詢五個(gè)功能組成。取消一個(gè)商品購(gòu)物車管理用戶取消一個(gè)商品購(gòu)物車管理用戶商品數(shù)量修改商品數(shù)量修改清空購(gòu)物車清空購(gòu)物車圖3-5

購(gòu)物車管理用例如圖3-5,購(gòu)物車管理模塊主要包括:添加商品、取消一個(gè)商品、數(shù)量修改、清空購(gòu)物車四個(gè)功能組成。

訂單查詢訂單查詢訂單審核訂單管理管理員訂單審核訂單管理管理員修改訂單修改訂單圖3-6

訂單管理用例如圖3-6,訂單管理模塊主要包括:訂單提交、刪除訂單、訂單明細(xì)三個(gè)功能組成。4.系統(tǒng)結(jié)構(gòu)設(shè)計(jì)圖4-1系統(tǒng)前臺(tái)功能設(shè)計(jì)圖4-2系統(tǒng)后臺(tái)功能設(shè)計(jì)圖4-3系統(tǒng)總體功能設(shè)計(jì)圖4-4個(gè)別功能設(shè)計(jì)5系統(tǒng)的詳細(xì)設(shè)計(jì)5.1BaseProvice類這個(gè)類重要是復(fù)用型的后臺(tái)動(dòng)態(tài)SQL語(yǔ)句的生成,在dao層使用@selectkey注解指定type為BaseProvice.class,method為指定的方法,5.1.1isString方法該方法返回值為一個(gè)String,參數(shù)為Fieldfield,Map<String,Object>map,Stringsql三個(gè),通過(guò)field.getType().toString().contains("String"),判斷出這個(gè)屬性為string屬性,然后在判斷這個(gè)屬性不為空的字符,這時(shí)候我就進(jìn)行了模糊查詢and連接方式的拼接,用傳入的sql參數(shù)的concat方法拼接“and”+StringUtil..StringtoCoulm(field.getName(),在拼接likeConcat(‘%’,#{entity,加上field的getName方法拼接屬性名稱上去,StringUtil.StringtoCoulm方法是將屬性格式化為字段的方法,如mebmerPrice就會(huì)格式化成mebmer_price,最后返回sql即可。5.1.2isObject方法該方法返回值為一個(gè)String,參數(shù)為Fieldfield,Map<String,Object>map,Stringsql三個(gè),通過(guò)field的getAnnotation(ObjectAlt.class)方法不為空的話我們就通過(guò)field.get(map.get(‘entity’),得到一個(gè)Object的對(duì)象,通過(guò)Object對(duì)象的getClss().getDeclaredFields(),得到屬性的數(shù)組,循環(huán)遍歷屬性數(shù)組,循環(huán)中先設(shè)置私有屬性可訪問,然后通過(guò)fields1[j].get(obj),得到這個(gè)屬性,判斷這個(gè)屬性如果是id的話在進(jìn)行拼接sql=sql.concat("AND"+StringUtil.StringtoCoulm(fields1[j].getName())+"=#{entity."+field.getName()+"."+fields1[j].getName()+"}");就可以將外鍵屬性的id進(jìn)行拼接進(jìn)入,最后返回sql即可。5.1.3查找單個(gè)對(duì)象首先我們?cè)贐aseProvice類下建立一個(gè)名為findOne返回值為String值參數(shù)為一個(gè)map的方法,其次通過(guò)map.get("entity").getClass()得到一個(gè)map中@param(“entity”)注解標(biāo)識(shí)為實(shí)體的Class對(duì)象,然后我們聲明一個(gè)String類型的字符串,初始化為”select*from”,通過(guò)concat方法用剛剛得到的Class對(duì)象的getSimpleName()方法得到類名,約定好lzl_+類名就為數(shù)據(jù)庫(kù)表名,這時(shí)候就得到了Select*from表名,最后我們?cè)谕ㄟ^(guò)concat方法拼接whereid=#{entity.id},返回字符串sql。5.1.4通過(guò)條件查找對(duì)象集合先聲明一個(gè)名為findList返回值為String參數(shù)為Map<String,Object>map的方法,通過(guò)map.get(“entity”)得到@param(“entity”)注解標(biāo)識(shí)為實(shí)體的Class對(duì)象,聲明一個(gè)String類型的字符串,初始化為select*from,通過(guò)concat方法拼接"lzl_"+clazz.getSimpleName()+"WHERE1=1",得到的sql為select*from表名where1=1,這時(shí)候我們調(diào)用Class對(duì)象的getDeclaredFields()方法得到屬性的數(shù)組fields,對(duì)屬性數(shù)組進(jìn)行遍歷,在循環(huán)開頭我們需要設(shè)置可以訪問私有屬性,這句代碼就是設(shè)置訪問私有屬性,fields[i].setAccessinble(true),然后進(jìn)行判斷這個(gè)屬性在實(shí)體中是否為空f(shuō)ields[i].get(map.get("entity"))!=null,不為空的時(shí)候我們對(duì)屬性的類型進(jìn)行判斷,這時(shí)候我們就要用得isString,isInteger,isObject方法,最后返回sql。5.1.5通過(guò)條件查找對(duì)象集合帶分頁(yè)這個(gè)方法中我們只需要調(diào)用上放的findList方法,最后我們將sqlConcat方法拼接limit#{pageNum},#{pageSize},最后返回sql。5.1.6帶條件的查詢數(shù)據(jù)總數(shù)這個(gè)方法我們也是先調(diào)用findList方法得到所有的記錄,然后通過(guò)sql的replace方法將*替換為count(*),返回sql即可。5.1.7增加一條記錄的方法聲明一個(gè)名為save返回值為String參數(shù)為map的方法,首先我們通過(guò)map.get(‘entity’).getClass()得到對(duì)象的Class對(duì)象,聲明二個(gè)String字符串,一個(gè)為sql初始化為insertinto,sql1初始化為values(;給sql字符串拼接上表名,通過(guò)sql.concat("lzl_"+clazz.getSimpleName()+"("),用class對(duì)象的getDeclaredFields()得到所有的屬性,遍歷屬性數(shù)組,設(shè)置可以訪問私有屬性,通過(guò)fields[i].getAnnotation(ObjectAlt.class)!=null時(shí),對(duì)sql進(jìn)行sql=sql.concat(StringUtil.StringtoCoulm(fields[i].getName())+"_id,");對(duì)sql1進(jìn)行sql1=sql1.concat("#{entity."+fields[i].getName()+".id},");然后continue出去,在判斷if(fields[i].getAnnotation(ArrayAlt.class)!=null),在continue出去,在判斷該屬性是否是id屬性,是的話 sql=sql.concat(StringUtil.StringtoCoulm(fields[i].getName())+",");sql1=sql1.concat("#{entity."+fields[i].getName()+"},");最后將sql的最后一個(gè)’,’替換為‘)’sql.substring(0,sql.lastIndexOf(",")).concat(")");sql1的最后一個(gè)‘,’替換為‘)’sql1=sql1.substring(0,sql1.lastIndexOf(",")).concat(")");最后返回sql.concat(sql1)就得到了增加語(yǔ)句 5.1.8根據(jù)id修改的方法5.1.9根據(jù)對(duì)象修改的方法 聲明一個(gè)名為update返回值為String參數(shù)為map的方法,聲明2個(gè)字符串分別為sql和where初始化為“update”和“whereid=#{entity.id}”,通過(guò)map.get(entity).getClass()得到class對(duì)象聲明為clazz,給sql拼接表名并加上set字符串,通過(guò)clazz.getDeclareFields()得到所有的屬性,設(shè)置可以訪問私有屬性,判斷是否為id屬性是的話不拼接,在判斷是否是對(duì)象,通過(guò)fields[i].getAnnotation(ObjectAlt.class)!=null判斷是對(duì)象,是對(duì)象的話給sql拼接sql=sql.concat(StringUtil.StringtoCoulm(fields[i].getName())+"_id=#{entity."+fields[i].getName()+".id}");在continue出去,在通過(guò)fields[i].get(map.get("entity"))!=null判斷當(dāng)前屬性值不為空,在拼接以下語(yǔ)句sql=sql.concat(StringUtil.StringtoCoulm(fields[i].getName())+"=#{entity."+fields[i].getName()+"},");最后去除掉字符串的最后一個(gè)字符sql=sql.substring(0,sql.length()-1);返回sql.concat(where)即可5.1.9根據(jù)id刪除的方法聲明一個(gè)名為remove返回值為String參數(shù)為map,先聲明一個(gè)sql的字符串,初始化為deletefrom,通過(guò)map.get("entity").getClass()得到Class對(duì)象,然后拼接lzl_"+clazz.getSimpleName()whereid=#{id},最后返回sql即可5.2

主要模塊的設(shè)計(jì)說(shuō)明與界面5.2.1用戶管理模塊用戶管理模塊主要包括用戶注冊(cè),登錄,退出、刪除、修改圖5-1未記住密碼以及未自動(dòng)登錄狀態(tài)圖5-2記住密碼狀態(tài)圖5-3自動(dòng)登錄的狀態(tài)圖5-4用戶管理頁(yè)面圖5-5用戶增加1圖5-6用戶增加2圖5-7用戶增加3圖5-8用戶信息修改圖5-9搜索過(guò)濾5.2.2前臺(tái)系統(tǒng)展示模塊圖5-10游客用戶展示頁(yè)面圖5-11登錄頁(yè)面圖5-12登錄成功后圖5-13購(gòu)物車5.3

系統(tǒng)的測(cè)試測(cè)試是軟件開發(fā)的重要組成部分,每一個(gè)開發(fā)人員都應(yīng)該養(yǎng)成良好的生活習(xí)慣的測(cè)試,通過(guò)不斷地測(cè)試和維護(hù),完成提高系統(tǒng)它是。顯著性檢驗(yàn)如下:(1)測(cè)試并不僅僅是為了找到錯(cuò)誤,通過(guò)分析發(fā)生的錯(cuò)誤發(fā)生的原因和趨,可以幫助項(xiàng)目經(jīng)理找到當(dāng)前軟件開發(fā)過(guò)程中的缺陷,以便及時(shí)改進(jìn);(2)分析可以幫助測(cè)試人員提高效率和測(cè)試的有效針對(duì)性;(3)錯(cuò)誤被發(fā)現(xiàn),也是有價(jià)值的,完整的測(cè)試是評(píng)估軟件質(zhì)量的方法。(4)測(cè)試可以使系統(tǒng)更加完善,減少不必要的時(shí)間來(lái)再看一遍同一個(gè)地方..測(cè)試一般有兩種方法:如果你已經(jīng)知道產(chǎn)品應(yīng)該具有的功能,可以通過(guò)測(cè)試來(lái)驗(yàn)證每一個(gè)功能都可以正常使用;如果知道在工作過(guò)程內(nèi)的產(chǎn)品,可以進(jìn)行測(cè)試,以檢查是否該產(chǎn)品在按照說(shuō)明書的正常運(yùn)轉(zhuǎn)。有2個(gè)測(cè)試方法,一個(gè)黑箱測(cè)試,一個(gè)叫白箱測(cè)試。對(duì)于這個(gè)系統(tǒng),我采取第一種方法,黑匣子。對(duì)完成的模塊,測(cè)試以查看功能模塊有沒有達(dá)到所需的。模塊測(cè)試和集成測(cè)試后,系統(tǒng)實(shí)現(xiàn)了所有的功能規(guī)范,達(dá)到了預(yù)期的要求。

6結(jié)束語(yǔ)

網(wǎng)站開發(fā)是一項(xiàng)復(fù)雜而艱巨的任務(wù),需要廣泛的知識(shí)。通過(guò)設(shè)計(jì)的網(wǎng)上交易系統(tǒng),讓我接觸到的基于Web的知識(shí)JavaWeb開發(fā)語(yǔ)言的許多方面,包括支持MVC架構(gòu)的Sp

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論