畢業(yè)設(shè)計(jì)(論文)-springboot水果超市商城系統(tǒng)設(shè)計(jì)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)-springboot水果超市商城系統(tǒng)設(shè)計(jì)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)-springboot水果超市商城系統(tǒng)設(shè)計(jì)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)-springboot水果超市商城系統(tǒng)設(shè)計(jì)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)-springboot水果超市商城系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(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)介

Springboot水果超市平臺(tái)緒論1.1研究意義日益發(fā)展的信息技術(shù),互聯(lián)網(wǎng)經(jīng)濟(jì)的快速興起,網(wǎng)上的購(gòu)物日益受到人們的關(guān)注,蔬菜水果網(wǎng)上批發(fā)市場(chǎng)模式也必然成為其潮流發(fā)展一部分?;趕pringboot技術(shù)的水果在線(xiàn)批發(fā)系統(tǒng)借助于遍布全球的互聯(lián)網(wǎng),進(jìn)行水果的市場(chǎng)消費(fèi)流動(dòng),因此水果的批發(fā)既可以在本地進(jìn)行,也可以在異地進(jìn)行。網(wǎng)上進(jìn)行水果批發(fā)既可以省下許多時(shí)間體力,也可以節(jié)省來(lái)回的花銷(xiāo)成本,更可以足不出戶(hù)就可以了解到水果批發(fā)市場(chǎng)的行情,消費(fèi)者可以吃到想吃的新鮮的水果。生產(chǎn)者以及批發(fā)銷(xiāo)售商可以獲得更多客戶(hù)資源和批發(fā)渠道,進(jìn)而提升蔬菜水果批發(fā)銷(xiāo)量和規(guī)模。輕輕松松實(shí)現(xiàn)買(mǎi)賣(mài)交易。本課題利用Javaspringboot技術(shù)開(kāi)發(fā)一個(gè)水果系統(tǒng),為消費(fèi)者和批發(fā)商提供一個(gè)平臺(tái),降低了成本、時(shí)間占用,也解決了交通困難等系列問(wèn)題,促進(jìn)人們生活消費(fèi)水平。1.2國(guó)內(nèi)外研究現(xiàn)狀、水平和發(fā)展趨勢(shì)隨著農(nóng)村市場(chǎng)經(jīng)濟(jì)發(fā)展,尤其是我國(guó)加入WTO,融入經(jīng)濟(jì)全球化潮流,水果業(yè)已進(jìn)入國(guó)內(nèi)外市場(chǎng)經(jīng)濟(jì)發(fā)展新時(shí)期,農(nóng)業(yè)、農(nóng)村與市場(chǎng)聯(lián)系越來(lái)越緊密,我國(guó)水果產(chǎn)業(yè)也進(jìn)入新歷史發(fā)展階段。水果產(chǎn)業(yè)部門(mén)、科技部門(mén)、涉農(nóng)單位對(duì)水果產(chǎn)業(yè)信息化的認(rèn)識(shí)逐步提高,積極探索水果產(chǎn)業(yè)信息體系如何向廣大農(nóng)民企業(yè)提供更服務(wù)。蔬菜經(jīng)營(yíng)場(chǎng)所封閉性、分散性和生產(chǎn)手段落后等特點(diǎn)決定了水果產(chǎn)業(yè)的發(fā)展起到巨大推動(dòng)作用。為了更好地服務(wù)于農(nóng)業(yè)、農(nóng)村、農(nóng)民,推進(jìn)農(nóng)業(yè)現(xiàn)代化進(jìn)程,農(nóng)業(yè)信息體系建設(shè)已迫在眉睫。隨著電子商務(wù)在批發(fā)市場(chǎng)運(yùn)用深化,一部分批發(fā)市場(chǎng)“蒸發(fā)”了,悄然退出市場(chǎng)、使有形市場(chǎng)和無(wú)形市場(chǎng)相結(jié)合從而產(chǎn)生一種新模式。對(duì)絕大多數(shù)市場(chǎng)來(lái)說(shuō),在組織創(chuàng)新上,當(dāng)前最易采取形式是有形市場(chǎng)與無(wú)形市場(chǎng)相結(jié)合的方式??梢猿浞掷糜行问袌?chǎng)的優(yōu)勢(shì),創(chuàng)辦網(wǎng)上市場(chǎng),搭建網(wǎng)上交易平臺(tái)為市場(chǎng)經(jīng)營(yíng)者建立網(wǎng)上水果商鋪,進(jìn)行網(wǎng)上水果商品宣傳,引導(dǎo)經(jīng)營(yíng)者開(kāi)展網(wǎng)上交易,實(shí)行與現(xiàn)貨交易并行的電子商務(wù)模式。農(nóng)業(yè)網(wǎng)站發(fā)展表明,互聯(lián)網(wǎng)和農(nóng)業(yè)的結(jié)合正在逐漸深入,這是農(nóng)業(yè)現(xiàn)代化發(fā)展需要,同時(shí)也是農(nóng)村電子商務(wù)自身發(fā)展必然趨勢(shì),為農(nóng)產(chǎn)品銷(xiāo)售電子商務(wù)的發(fā)展提供了保障在廣大購(gòu)物者漸漸對(duì)產(chǎn)品性?xún)r(jià)比要求越來(lái)越高的今天,我們發(fā)現(xiàn)必須要有一套完善的采購(gòu)經(jīng)銷(xiāo)體系、才能不斷提高產(chǎn)品質(zhì)量同時(shí)降低產(chǎn)品的價(jià)格,所以減少產(chǎn)品銷(xiāo)售中間環(huán)節(jié)成本增加勢(shì)在必行。為此創(chuàng)辦電子商務(wù)果蔬商城網(wǎng)站,讓優(yōu)質(zhì)新鮮的蔬菜水果在網(wǎng)站直接面消費(fèi)者,一提高網(wǎng)站可以提供比在商店購(gòu)物中更為詳盡資料、歷史淵源以及顧客評(píng)論等信息,顧客可以方便地從琳瑯滿(mǎn)目的各類(lèi)精品蔬菜水果中快速查詢(xún)出需要的產(chǎn)品;另一方面也少商店運(yùn)營(yíng)成本,將價(jià)格實(shí)惠轉(zhuǎn)讓給顧客、使電子商務(wù)果蔬商城網(wǎng)站的發(fā)展成為必然。1.3項(xiàng)目的可行性研究設(shè)計(jì)此系統(tǒng)需要java面向?qū)ο缶幊袒A(chǔ),數(shù)據(jù)庫(kù)應(yīng)用知識(shí)以及功能分析。根據(jù)目前階段所掌握的知識(shí),根據(jù)這學(xué)期以及之前學(xué)習(xí)掌握的java編程知識(shí)和數(shù)據(jù)庫(kù)應(yīng)用知識(shí)以及前端知識(shí)做出一個(gè)這樣的基于、springboot輕量級(jí)框架網(wǎng)頁(yè)版的水果超市平臺(tái)。1.4相關(guān)技術(shù)簡(jiǎn)介1.4.1springSpring框架是\t"/item/Spring%20Boot/_blank"Java平臺(tái)上的一種開(kāi)源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性容器。盡管Spring框架自身對(duì)編程模型沒(méi)有限制,以至于后來(lái)讓它作為\t"/item/Spring%20Boot/_blank"EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開(kāi)發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)核心特性,并通過(guò)依賴(lài)注入實(shí)現(xiàn)控制反轉(zhuǎn)來(lái)實(shí)現(xiàn)管理對(duì)象生命周期的容器化,利用面向切面編程進(jìn)行聲明式事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪(fǎng)問(wèn),提供大量?jī)?yōu)秀的Web框架方便開(kāi)發(fā)等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,它提供了一種通過(guò)Java的反射機(jī)制對(duì)Java對(duì)象進(jìn)行統(tǒng)一的配置管理的方法。Spring框架利用容器管理對(duì)象生命周期,容器可以通過(guò)掃描XML文件配置對(duì)象。Spring框架具有\(zhòng)t"/item/Spring%20Boot/_blank"面向切面編程(AOP)框架,SpringAOP框架基于代理模式,運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,Spring框架下的事務(wù)管理、遠(yuǎn)程訪(fǎng)問(wèn)等功能均可以通過(guò)使用SpringAOP技術(shù)實(shí)現(xiàn)。Spring的事務(wù)管理框架為Java平臺(tái)帶來(lái)了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava平臺(tái)的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過(guò)事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring數(shù)據(jù)訪(fǎng)問(wèn)框架解決了開(kāi)發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫(kù)時(shí)遇到的常見(jiàn)困難。它不僅對(duì)Java:JDBC、MyBATIs、Hibernate、Java數(shù)據(jù)對(duì)象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪(fǎng)問(wèn)框架中提供支持,同時(shí)還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪(fǎng)問(wèn)提供了靈活的抽象。Spring框架最初是沒(méi)有打算構(gòu)建一個(gè)自己的Web\t"/item/Spring%20Boot/_blank"MVC框架,其開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中認(rèn)為現(xiàn)有的Web框架的呈現(xiàn)層和請(qǐng)求處理層之間以及請(qǐng)求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。1.4.2mybatismybatis是對(duì)jdbc的封裝,它讓數(shù)據(jù)庫(kù)底層操作變的透明。mybatis的操作都是圍繞一個(gè)sqlSessionFactory實(shí)例展開(kāi)。mybatis通過(guò)配置文件關(guān)聯(lián)到各實(shí)體類(lèi)Mapper文件,Mapper文件中配置了每個(gè)類(lèi)對(duì)數(shù)據(jù)庫(kù)所需進(jìn)行的sql語(yǔ)句映射。在每次與數(shù)據(jù)庫(kù)交互,通過(guò)sqlSessionFactory拿到一個(gè)sqlSession,再執(zhí)行sql。頁(yè)面發(fā)送請(qǐng)求給控制器,控制器調(diào)用業(yè)務(wù)層處理,邏輯層向持久層發(fā)送請(qǐng)求,持久層與數(shù)據(jù)庫(kù)交互,將結(jié)果返回給業(yè)務(wù)層,業(yè)務(wù)層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)。1.4.3Shiro權(quán)限框架shiro是一個(gè)安全框架,是Apache的一個(gè)項(xiàng)目。shiro提供了:認(rèn)證、授權(quán)、加密、會(huì)話(huà)管理、與web集成、緩存等模塊。

1.1、模塊介紹Authentication:用戶(hù)身份識(shí)別,可以是登錄;Authorization:授權(quán),權(quán)限驗(yàn)證,驗(yàn)證某個(gè)已認(rèn)證的用戶(hù)是否擁有某個(gè)權(quán)限功能;即判斷用戶(hù)是否能做事情,常見(jiàn):驗(yàn)證某個(gè)用戶(hù)是否擁有某個(gè)角色?;蛘呒?xì)粒度的驗(yàn)證某個(gè)用戶(hù)對(duì)某資源是否具有某個(gè)權(quán)限。SessionManager:會(huì)話(huà)管理,用戶(hù)登錄后就是一次會(huì)話(huà),在沒(méi)有退出之前,所有信息都在會(huì)話(huà)中;會(huì)話(huà)可以是普通JavaSE環(huán)境的,也可以是如Web環(huán)境的。Cryptography:加密,保護(hù)數(shù)據(jù)的安全性,密碼加密存儲(chǔ)到數(shù)據(jù)庫(kù),而不是明文存儲(chǔ)。WebSupport:Web支持,可以非常容易的集成到j(luò)avaweb環(huán)境。Caching:緩存,比如用戶(hù)登錄后,其用戶(hù)信息、擁有的角色/權(quán)限不必每次去查,這樣可以提高效率。Concurrency:shiro支持多線(xiàn)程應(yīng)用的并發(fā)驗(yàn)證,即如在一個(gè)線(xiàn)程中開(kāi)啟另一個(gè)線(xiàn)程,能把權(quán)限自動(dòng)傳播過(guò)去。Testing:提供測(cè)試支持。2、核心概念Subject:主體,代表了當(dāng)前操作用戶(hù),這個(gè)用戶(hù)不一定是具體的人,與當(dāng)前應(yīng)用交互的任何東西都是subject,即抽象概念。所有Subject都綁定到SecurityManager,與Subject交互都會(huì)委托給SercurityManager;SecurityManager:安全管理器;即所有與subject安全有關(guān)的操作都會(huì)與SecurityManager交互;且它管理著所有的Subject;它負(fù)責(zé)與里面的各個(gè)組件交互,也可以把它理解成springmvc中DispatcherServlet前端控制器。Realm:域,安全數(shù)據(jù)源。shiro從Realm獲取安全數(shù)據(jù)(如用戶(hù)、權(quán)限),就是說(shuō)SecurityManager驗(yàn)證用戶(hù)身份,那么它需要從Realm得到用戶(hù)相應(yīng)角色、權(quán)限進(jìn)行驗(yàn)證用戶(hù)是否能進(jìn)行操作;可以把Realm看成DataSource,即安全數(shù)據(jù)源。從上圖可以看出:1、應(yīng)用代碼通過(guò)Subject來(lái)進(jìn)行認(rèn)證和授權(quán),而Subject又委托給SecurityManager;2、SecurityManager要驗(yàn)證用戶(hù)身份,那么它需要從Realm中獲取相對(duì)應(yīng)的用戶(hù)、角色、權(quán)限進(jìn)行比較以確定用戶(hù)身份是否合法。總結(jié):shiro不提供維護(hù)用戶(hù)、權(quán)限,而是通過(guò)Realm讓開(kāi)發(fā)人員自己注入。3、shiro內(nèi)部架構(gòu)介紹1)Subject:主體,看到主體可以是任何與應(yīng)用交互“用戶(hù)”。2)SecurityManager:相當(dāng)于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher。它是Shiro的核心,所有具體的交互都通過(guò)SecurityManager進(jìn)行控制。它管理著所有Subject、且負(fù)責(zé)進(jìn)行認(rèn)證和授權(quán)、及會(huì)話(huà)、緩存的管理。3)Authenticator:認(rèn)證器,負(fù)責(zé)主體認(rèn)證的,這是一個(gè)擴(kuò)展點(diǎn),如果用戶(hù)覺(jué)得Shiro默認(rèn)的不好,我們可以自定義實(shí)現(xiàn)。其需要認(rèn)證策略(AuthenticationStrategy),即什么情況下算用戶(hù)認(rèn)證通過(guò)了。4)Authrizer:授權(quán)器,或者訪(fǎng)問(wèn)控制器。它用來(lái)決定主體是否有權(quán)限進(jìn)行相應(yīng)的操作,即控制著用戶(hù)能訪(fǎng)問(wèn)應(yīng)用中的哪些功能。5)Realm:可以有1個(gè)或多個(gè)Realm,可以認(rèn)為是安全實(shí)體數(shù)據(jù)源,即用于獲取安全實(shí)體的。它可以是JDBC實(shí)現(xiàn),也可以是LDAP實(shí)現(xiàn),或者內(nèi)存實(shí)現(xiàn)等。6)SessionManager:如果寫(xiě)過(guò)Servlet就應(yīng)該知道Session的概念,Session需要有人去管理它的生命周期,這個(gè)組件就是SessionManager。而Shiro并不僅僅可以用在Web環(huán)境,也可以用在如普通的JavaSE環(huán)境。7)SessionDAO:DAO大家都用過(guò),數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象,用于會(huì)話(huà)的CRUD。我們可以自定義SessionDAO的實(shí)現(xiàn),控制session存儲(chǔ)的位置。如通過(guò)JDBC寫(xiě)到數(shù)據(jù)庫(kù)或通過(guò)jedis寫(xiě)入redis中。另外SessionDAO中可以使用Cache進(jìn)行緩存,以提高性能。8)CacheManager:緩存管理器。它來(lái)管理如用戶(hù)、角色、權(quán)限等的緩存的。因?yàn)檫@些數(shù)據(jù)基本上很少去改變,放到緩存中后可以提高訪(fǎng)問(wèn)的性能。9)Cryptography:密碼模塊,Shiro提高了一些常見(jiàn)的加密組件用于如密碼加密/解密的。4、過(guò)濾器當(dāng)Shiro被運(yùn)用到web項(xiàng)目時(shí),Shiro會(huì)自動(dòng)創(chuàng)建一些默認(rèn)的過(guò)濾器對(duì)客戶(hù)端請(qǐng)求進(jìn)行過(guò)濾。以下是Shiro提供的過(guò)濾器:過(guò)濾器簡(jiǎn)稱(chēng)對(duì)應(yīng)的Java類(lèi)anonorg.apache.shiro.web.filter.authc.AnonymousFilterauthcorg.apache.shiro.web.filter.authc.FormAuthenticationFilterauthcBasicorg.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilterpermsorg.apache.shiro.web.filter.authz.PermissionsAuthorizationFilterportorg.apache.shiro.web.filter.authz.PortFilterrestorg.apache.shiro.web.filter.authz.HttpMethodPermissionFilterrolesorg.apache.shiro.web.filter.authz.RolesAuthorizationFiltersslorg.apache.shiro.web.filter.authz.SslFilteruserorg.apache.shiro.web.filter.authc.UserFilterlogoutorg.apache.shiro.web.filter.authc.LogoutFilternoSessionCreationorg.apache.shiro.web.filter.session.NoSessionCreationFilter解釋?zhuān)?admins/**=anon#表示該uri可以匿名訪(fǎng)問(wèn)/admins/**=auth#表示該uri需要認(rèn)證才能訪(fǎng)問(wèn)/admins/**=authcBasic#表示該uri需要httpBasic認(rèn)證/admins/**=perms[user:add:*]#表示該uri需要認(rèn)證用戶(hù)擁有user:add:*權(quán)限才能訪(fǎng)問(wèn)/admins/**=port[8081]#表示該uri需要使用8081端口/admins/**=rest[user]#相當(dāng)于/admins/**=perms[user:method],其中,method表示get、post、delete等/admins/**=roles[admin]#表示該uri需要認(rèn)證用戶(hù)擁有admin角色才能訪(fǎng)問(wèn)/admins/**=ssl#表示該uri需要使用https協(xié)議/admins/**=user#表示該uri需要認(rèn)證或通過(guò)記住我認(rèn)證才能訪(fǎng)問(wèn)/logout=logout#表示注銷(xiāo),可以當(dāng)作固定配置1.4.4SpringBootSpringBoot是Pivotal團(tuán)隊(duì)在2013年開(kāi)始研發(fā)、2014年4月發(fā)布第一個(gè)版本全新開(kāi)源的輕量級(jí)框架。它基于Spring4.0設(shè)計(jì),不僅繼承了Spring框架原有優(yōu)秀特性,而且還通過(guò)簡(jiǎn)化配置來(lái)進(jìn)一步簡(jiǎn)化了Spring應(yīng)用的整個(gè)搭建開(kāi)發(fā)過(guò)程。另外SpringBoot通過(guò)集成大量的框架使得依賴(lài)包的版本沖突,引用的不穩(wěn)定性等問(wèn)題得到了很好的解決。SpringBoot具備的特征有:(1)可以創(chuàng)建獨(dú)立的\t"/item/Spring%20Boot/_blank"Spring應(yīng)用程序,并且基于其Maven或Gradle插件,可以創(chuàng)建可執(zhí)行的JARs和WARs;(2)內(nèi)嵌Tomcat或Jetty等Servlet容器;(3)提供自動(dòng)配置的“starter”項(xiàng)目對(duì)象模型(POMS)以簡(jiǎn)化\t"/item/Spring%20Boot/_blank"Maven配置;(4)盡可能自動(dòng)配置Spring容器;(5)提供準(zhǔn)備好的特性,如指標(biāo)、健康檢查和外部化配置;(6)絕對(duì)沒(méi)有代碼生成,不需要XML配置。

[1]

[2]SpringBoot框架中還有兩個(gè)非常重要的策略:開(kāi)箱即用和約定優(yōu)于配置。開(kāi)箱即用,Outofbox,是指在開(kāi)發(fā)過(guò)程中,通過(guò)在MAVEN項(xiàng)目的pom文件中添加相關(guān)依賴(lài)包,然后使用對(duì)應(yīng)注解來(lái)代替繁瑣的XML配置文件以管理對(duì)象的生命周期。這個(gè)特點(diǎn)使得開(kāi)發(fā)人員擺脫了復(fù)雜的配置工作以及依賴(lài)的管理工作,更加專(zhuān)注于業(yè)務(wù)邏輯。約定優(yōu)于配置,Conventionoverconfiguration,是一種由SpringBoot本身來(lái)配置目標(biāo)結(jié)構(gòu),由開(kāi)發(fā)者在結(jié)構(gòu)中添加信息的軟件設(shè)計(jì)范式。這一特點(diǎn)雖降低了部分靈活性,增加了BUG定位的復(fù)雜性,但減少了開(kāi)發(fā)人員需要做出決定的數(shù)量,同時(shí)減少了大量的XML配置,并且可以將代碼編譯、測(cè)試和打包等工作自動(dòng)化。SpringBoot應(yīng)用系統(tǒng)開(kāi)發(fā)模板的基本架構(gòu)設(shè)計(jì)從前端到后臺(tái)進(jìn)行說(shuō)明:前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它們都是用Java語(yǔ)言編寫(xiě)的,渲染模板并輸出相應(yīng)文本,使得界面的設(shè)計(jì)與應(yīng)用的邏輯分離,同時(shí)前端開(kāi)發(fā)還會(huì)使用到Bootstrap、AngularJS、JQuery等;在瀏覽器的數(shù)據(jù)傳輸格式上采用Json,非xml,同時(shí)提供RESTfulAPI;SpringMVC框架用于數(shù)據(jù)到達(dá)服務(wù)器后處理請(qǐng)求;到\t"/item/Spring%20Boot/_blank"數(shù)據(jù)訪(fǎng)問(wèn)層主要有Hibernate、MyBatis、JPA等持久層框架;數(shù)據(jù)庫(kù)常用\t"/item/Spring%20Boot/_blank"MySQL;開(kāi)發(fā)工具推薦IntelliJIDEA。1.4.5jQueryjQuery是一個(gè)快速、簡(jiǎn)潔JavaScript框架,是繼Prototype之后又一個(gè)優(yōu)秀的JavaScript代碼庫(kù)(或JavaScript框架)。jQuery設(shè)計(jì)的宗旨是“writeLess,DoMore”,即倡導(dǎo)寫(xiě)更少的代碼,做更多的事情。它封裝JavaScript常用的功能代碼,提供一種簡(jiǎn)便的JavaScript設(shè)計(jì)模式,優(yōu)化HTML文檔操作、事件處理、動(dòng)畫(huà)設(shè)計(jì)和Ajax交互。jQuery的核心特性可以總結(jié)為:具有獨(dú)特的鏈?zhǔn)秸Z(yǔ)法和短小清晰的多功能接口;具有高效靈活的css選擇器,并且可對(duì)CSS選擇器進(jìn)行擴(kuò)展;擁有便捷的插件擴(kuò)展機(jī)制和豐富的插件。jQuery兼容各種主流瀏覽器,如IE6.0+、FF1.5+、Safari2.0+、Opera9.0+等1.4.6MysqlMySQL是一款安全、跨平臺(tái)、高效的,并與PHP、Java等主流編程語(yǔ)言緊密結(jié)合的數(shù)據(jù)庫(kù)系統(tǒng)。該數(shù)據(jù)庫(kù)系統(tǒng)是由瑞典的MySQLAB公司開(kāi)發(fā)、發(fā)布并支持,由MySQL的初始開(kāi)發(fā)人員DavidAxmark和MichaelMontyWidenius于1995年建立的。

MySQL的象征符號(hào)是一只名為Sakila的海豚,代表著MySQL數(shù)據(jù)庫(kù)的速度、能力、精確和優(yōu)秀本質(zhì)。

圖:MySQL圖標(biāo)

目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),使得很多公司都采用MySQL數(shù)據(jù)庫(kù)以降低成本。

MySQL數(shù)據(jù)庫(kù)可以稱(chēng)得上是目前運(yùn)行速度最快的SQL語(yǔ)言數(shù)據(jù)庫(kù)之一。除了具有許多其他數(shù)據(jù)庫(kù)所不具備的功能外,MySQL數(shù)據(jù)庫(kù)還是一種完全免費(fèi)的產(chǎn)品,用戶(hù)可以直接通過(guò)網(wǎng)絡(luò)下載MySQL數(shù)據(jù)庫(kù),而不必支付任何費(fèi)用。MySQL特點(diǎn)下面總結(jié)了一下MySQL具備的特點(diǎn)。1)功能強(qiáng)大MySQL中提供了多種數(shù)據(jù)庫(kù)存儲(chǔ)引擎,各引擎各有所長(zhǎng),適用于不同的應(yīng)用場(chǎng)合,用戶(hù)可以選擇最合適的引擎以得到最高性能,可以處理每天訪(fǎng)問(wèn)量超過(guò)數(shù)億的高強(qiáng)度的搜索Web站點(diǎn)。MySQL5支持事務(wù)、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等。2)支持跨平臺(tái)MySQL支持至少20種以上的開(kāi)發(fā)平臺(tái),包括Linux、Windows、FreeBSD、IBMAIX、AIX、FreeBSD等。這使得在任何平臺(tái)下編寫(xiě)的程序都可以進(jìn)行移植,而不需要對(duì)程序做任何的修改。3)運(yùn)行速度快高速是MySQL的顯著特性。在MySQL中,使用了極快的B樹(shù)磁盤(pán)表(MyISAM)和索引壓縮;通過(guò)使用優(yōu)化的單掃描多連接,能夠極快地實(shí)現(xiàn)連接;SQL函數(shù)使用高度優(yōu)化的類(lèi)庫(kù)實(shí)現(xiàn),運(yùn)行速度極快。4)支持面向?qū)ο驪HP支持混合編程方式。編程方式可分為純粹面向?qū)ο?、純粹面向過(guò)程、面句對(duì)象與面向過(guò)程混合3種方式。5)安全性高靈活和安全的權(quán)限與密碼系統(tǒng),允許基本主機(jī)的驗(yàn)證。連接到服務(wù)器時(shí),所有的密碼傳輸均采用加密形式,從而保證了密碼的安全。6)成本低MySQL數(shù)據(jù)庫(kù)是一種完全免費(fèi)的產(chǎn)品,用戶(hù)可以直接通過(guò)網(wǎng)絡(luò)下載。7)支持各種開(kāi)發(fā)語(yǔ)言MySQL為各種流行的程序設(shè)計(jì)語(yǔ)言提供支持,為它們提供了很多的API函數(shù),包括PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl語(yǔ)言等。8)數(shù)據(jù)庫(kù)存儲(chǔ)容量大MySQL數(shù)據(jù)庫(kù)的最大有效表尺寸通常是由操作系統(tǒng)對(duì)文件大小的限制決定的,而不是由MySQL內(nèi)部限制決定的。InnoDB存儲(chǔ)引擎將InnoDB表保存在一個(gè)表空間內(nèi),該表空間可由數(shù)個(gè)文件創(chuàng)建,表空間的最大容量為64TB,可以輕松處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。9)支持強(qiáng)大的內(nèi)置函數(shù)PHP中提供了大量?jī)?nèi)置函數(shù),幾乎涵蓋了Web應(yīng)用開(kāi)發(fā)中的所有功能。它內(nèi)置了數(shù)據(jù)庫(kù)連接、文件上傳等功能,MySQL支持大量的擴(kuò)展庫(kù),如MySQLi等,可以為快速開(kāi)發(fā)Web應(yīng)用提供便利。數(shù)據(jù)庫(kù)的應(yīng)用數(shù)據(jù)庫(kù)是計(jì)算機(jī)應(yīng)用系統(tǒng)中的一種專(zhuān)門(mén)管理數(shù)據(jù)資源的系統(tǒng)。數(shù)據(jù)有多種形式,如文字、數(shù)碼、符號(hào)、圖形、圖像及聲音等,數(shù)據(jù)是所有計(jì)算機(jī)系統(tǒng)所要處理的對(duì)象。我們所熟知的一種處理辦法是制作文件,即將處理過(guò)程編成程序文件,將所涉及的數(shù)據(jù)按程序要求組成數(shù)據(jù)文件,再用程序來(lái)調(diào)用,數(shù)據(jù)文件與程序文件保持著一定的關(guān)系。

在計(jì)算機(jī)應(yīng)用迅速發(fā)展的情況下,這種文件式管理方法便顯出它的不足。比如,它使得數(shù)據(jù)通用性差、不便于移植、在不同文件中存儲(chǔ)大量重復(fù)信息、浪費(fèi)存儲(chǔ)空間、更新不便等。

而數(shù)據(jù)庫(kù)系統(tǒng)便能解決上述問(wèn)題。數(shù)據(jù)庫(kù)系統(tǒng)不從具體的應(yīng)用程序出發(fā),而是立足于數(shù)據(jù)本身的管理,它將所有數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中,進(jìn)行科學(xué)的組織,并借助于數(shù)據(jù)庫(kù)管理系統(tǒng),以它為中介,與各種應(yīng)用程序或應(yīng)用系統(tǒng)接口,使之能方便地使用數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

其實(shí)簡(jiǎn)單地說(shuō),數(shù)據(jù)庫(kù)就是一組經(jīng)過(guò)計(jì)算機(jī)整理后的數(shù)據(jù),存儲(chǔ)在一個(gè)或多個(gè)文件中,而管理這個(gè)數(shù)據(jù)庫(kù)的軟件就稱(chēng)為數(shù)據(jù)庫(kù)管理系統(tǒng)。一般一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)(DatabaseSystem)

可以分為數(shù)據(jù)庫(kù)(Database)與數(shù)據(jù)管理系統(tǒng)(DatabaseManagementSystem,DBMS)兩個(gè)部分。主流的數(shù)據(jù)庫(kù)軟件有Oracle、Informix、Sybase、SQLServer、PostgreSQL、MySQL、Access、FoxPro和Teradata等等。數(shù)據(jù)庫(kù)在Web開(kāi)發(fā)中的重要地位歸根結(jié)底,動(dòng)態(tài)網(wǎng)站都是對(duì)數(shù)據(jù)進(jìn)行操作,我們平時(shí)瀏覽網(wǎng)頁(yè)時(shí),會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)的內(nèi)容會(huì)經(jīng)常變化,而頁(yè)面的主體結(jié)構(gòu)框架沒(méi)變,新聞就是一個(gè)典型。這是因?yàn)槲覀儗⑿侣劥鎯?chǔ)在了數(shù)據(jù)庫(kù)中,用戶(hù)在瀏覽時(shí),程序就會(huì)根據(jù)用戶(hù)所請(qǐng)求的新聞編號(hào),將對(duì)應(yīng)的新聞從數(shù)據(jù)庫(kù)中讀取出來(lái),然后再以特定的格式響應(yīng)給用戶(hù)。

Web系統(tǒng)的開(kāi)發(fā)基本上是離不開(kāi)數(shù)據(jù)庫(kù)的,因?yàn)槿魏螙|西都要存放在數(shù)據(jù)庫(kù)中。所謂的動(dòng)態(tài)網(wǎng)站就是基于數(shù)據(jù)庫(kù)開(kāi)發(fā)的系統(tǒng),最重要的就是數(shù)據(jù)管理,或者說(shuō)我們?cè)陂_(kāi)發(fā)時(shí)都是在圍繞數(shù)據(jù)庫(kù)在寫(xiě)程序。所以作為一個(gè)Web程序員,只有先掌握一門(mén)數(shù)據(jù)庫(kù),才可能去進(jìn)行軟件開(kāi)發(fā)。

系統(tǒng)需求分析2.1系統(tǒng)功能分析1.用戶(hù)模塊管理:用戶(hù)登錄、用戶(hù)注冊(cè)、用戶(hù)的查詢(xún)、添加、刪除操作、2.頁(yè)面模塊管理:頁(yè)面菜單的展示、添加操作、修改操作、刪除操作、3.角色模塊管理:用戶(hù)角色列表的查看、刪除等操作、4.商品管理:商品信息的查看、添加、刪除、5.訂單管理:訂單管理信息操作、6.用戶(hù)評(píng)論模塊管理:用戶(hù)評(píng)論查詢(xún)、添加、刪除、7.收藏模塊管理:對(duì)喜歡水果的收藏管理8.購(gòu)物車(chē)管理:對(duì)水果商品加入購(gòu)物車(chē)、移除購(gòu)物車(chē)9.修改密碼管理以及個(gè)人信息查看管理9.注銷(xiāo)退出登錄管理2.2系統(tǒng)運(yùn)行環(huán)境JavaJDK1.8環(huán)境配置、Java運(yùn)行在idea軟件上,數(shù)據(jù)庫(kù)用mysql5版本數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)采用NacicatMysql可視化工具、基于主流的谷歌瀏覽器運(yùn)行展示以及F12控制臺(tái)調(diào)試樣式、系統(tǒng)設(shè)計(jì)3.1系統(tǒng)模板設(shè)計(jì)系統(tǒng)主要設(shè)計(jì)采用Java語(yǔ)言開(kāi)發(fā)、采用springboot為后臺(tái)框架、數(shù)據(jù)庫(kù)框架采用mybatis、前端采用jquery、layui框架等主要模塊設(shè)計(jì)如下:1.用戶(hù)模塊管理:用戶(hù)登錄、用戶(hù)注冊(cè)、用戶(hù)的查詢(xún)、添加、刪除操作、2.頁(yè)面模塊管理:頁(yè)面菜單的展示、添加操作、修改操作、刪除操作、3.角色模塊管理:用戶(hù)角色列表的查看、刪除等操作、4.商品管理:商品信息的查看、添加、刪除、5.訂單管理:訂單管理信息操作、6.用戶(hù)評(píng)論模塊管理:用戶(hù)評(píng)論查詢(xún)、添加、刪除、7.收藏模塊管理:對(duì)喜歡水果的收藏管理8.購(gòu)物車(chē)管理:對(duì)水果商品加入購(gòu)物車(chē)、移除購(gòu)物車(chē)9.修改密碼管理以及個(gè)人信息查看管理9.注銷(xiāo)退出登錄管理3.2系統(tǒng)流程描述3項(xiàng)目源碼架構(gòu)設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)4.1程序主要類(lèi)4.1.1用戶(hù)管理員admin實(shí)體類(lèi)privateIntegerid;//管理員ID@ValidateEntity(required=true,errorRequiredMsg="管理員對(duì)應(yīng)角色不能為空!")privateIntegerroleId;//管理員對(duì)應(yīng)角色I(xiàn)D@ValidateEntity(requiredMaxLength=true,maxLength=256,errorMaxLengthMsg="管理員頭像長(zhǎng)度不能大于256!")privateStringheadPic;//管理員頭像@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=16,minLength=1,errorRequiredMsg="管理員名稱(chēng)不能為空!",errorMaxLengthMsg="管理員名稱(chēng)長(zhǎng)度不能大于16!",errorMinLengthMsg="管理員名稱(chēng)長(zhǎng)度不能小于1!")privateStringname;//管理員姓名@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=16,minLength=5,errorRequiredMsg="管理員密碼不能為空!",errorMaxLengthMsg="管理員密碼長(zhǎng)度不能大于16!",errorMinLengthMsg="管理員密碼長(zhǎng)度不能小于5!")privateStringpassword;//管理員密碼默認(rèn)為:123456privateIntegersex;//管理員性別:1:男;2:女;3:未知默認(rèn)為3:未知@ValidateEntity(requiredMaxLength=true,maxLength=128,errorMaxLengthMsg="管理員地址長(zhǎng)度不能大于128!")privateStringaddress;//管理員地址privateLongmobile;//管理員電話(huà)@ValidateEntity(required=true,errorRequiredMsg="管理員狀態(tài)不能為空!")privateIntegerstate;//管理員狀態(tài):1:?jiǎn)⒂茫?:凍結(jié)4.1.4公告Announcement實(shí)體類(lèi)@DatapublicclassAnnouncement{privateIntegerid;//公告ID@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=256,minLength=1,errorRequiredMsg="公告內(nèi)容不能為空!",errorMaxLengthMsg="公告內(nèi)容長(zhǎng)度不能大于256!",errorMinLengthMsg="公告內(nèi)容長(zhǎng)度不能小于1!")privateStringcontent;//公告內(nèi)容@ValidateEntity(required=true,errorRequiredMsg="公告發(fā)布對(duì)應(yīng)管理員角色不能為空!")privateIntegeradminId;//公告發(fā)布所屬管理員privateDatecreateTime;//公告創(chuàng)建時(shí)間privateDateupdateTime;//公告更新時(shí)間4.1.4菜單Menu實(shí)體類(lèi)publicclassMenu{privateIntegerid;//菜單ID@ValidateEntity(required=true,errorRequiredMsg="上級(jí)菜單不能為空!")privateIntegerparentId;//上級(jí)菜單的ID:默認(rèn)為0@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,minLength=1,maxLength=32,errorRequiredMsg="菜單名稱(chēng)不能為空!",errorMinLengthMsg="菜單名稱(chēng)長(zhǎng)度至少為1!",errorMaxLengthMsg="菜單名稱(chēng)長(zhǎng)度不能大于32!")privateStringname;//菜單名稱(chēng)@ValidateEntity(requiredMaxLength=true,maxLength=256,errorMaxLengthMsg="菜單路徑長(zhǎng)度不能大于256!")privateStringurl;//菜單路徑@ValidateEntity(requiredMaxValue=true,requiredMinValue=true,required=true,maxValue=1024,minValue=0,errorMaxValueMsg="菜單排序最大值為1024!",errorMinValueMsg="菜單排序最小值為0!",errorRequiredMsg="菜單排序不能為空!")privateIntegersort;//菜單排序:默認(rèn)為0,值越大則在同級(jí)別越優(yōu)先顯示@ValidateEntity(required=true,requiredMaxLength=true,maxLength=64,errorRequiredMsg="菜單圖標(biāo)不能為空!",errorMaxLengthMsg="菜單圖標(biāo)長(zhǎng)度不能大于64!")privateStringicon;//菜單圖標(biāo)@ValidateEntity(required=true,errorRequiredMsg="菜單狀態(tài)不能為空!")privateIntegerstate;//菜單狀態(tài):1:開(kāi)啟;2:停用4.1.4評(píng)論Comment實(shí)體類(lèi)publicclassComment{privateLongid;//評(píng)論id@ValidateEntity(required=true,errorRequiredMsg="評(píng)論對(duì)應(yīng)的商品不能為空!")privateLongproductId;//評(píng)論對(duì)應(yīng)的商品idprivateProductproduct;//評(píng)論對(duì)應(yīng)的商品@ValidateEntity(required=true,errorRequiredMsg="評(píng)論對(duì)應(yīng)的用戶(hù)不能為空!")privateLonguserId;//評(píng)論對(duì)應(yīng)的用戶(hù)idprivateUseruser;//評(píng)論對(duì)應(yīng)的用戶(hù)@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=100,minLength=1,errorRequiredMsg="評(píng)論內(nèi)容不能為空!",errorMinLengthMsg="評(píng)論內(nèi)容的長(zhǎng)度不能小于1",errorMaxLengthMsg="評(píng)論內(nèi)容的長(zhǎng)度不能大于100!")privateStringcontent;//評(píng)論內(nèi)容privateDatecreateTime;//評(píng)論創(chuàng)建時(shí)間4.1.4訂單order實(shí)體類(lèi)privateLongid;//訂單idprivateLongorderNo;//訂單流水號(hào)privateLonguserId;//訂單所屬用戶(hù)idprivateUseruser;//訂單所屬用戶(hù)privateIntegerstate;//訂單狀態(tài)0:未支付;1:已支付,待發(fā)貨;2:已取消;3:已送達(dá),待簽收;4:已簽收;5:已發(fā)貨privateBigDecimaltotalPrice;//訂單總價(jià)privateLongaddressId;//訂單對(duì)應(yīng)的配送地址idprivateAddressaddress;//訂單對(duì)應(yīng)的配送地址privateStringremark;//訂單留言privateIntegerisDeleted;//用戶(hù)是否刪除訂單0:未刪除;1:已刪除privateList<OrderItem>orderItemList;//訂單對(duì)應(yīng)的訂單詳情privateDatecreateTime;//訂單創(chuàng)建時(shí)間privateDateupdateTime;//訂單更新時(shí)間4.1.4商品Product實(shí)體類(lèi)publicclassProduct{privateLongid;//商品id@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=16,minLength=1,errorRequiredMsg="商品名稱(chēng)不能為空!",errorMaxLengthMsg="商品名稱(chēng)長(zhǎng)度不能大于16!",errorMinLengthMsg="商品名稱(chēng)長(zhǎng)度不能小于1!")privateStringproductName;//商品的名稱(chēng)@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=32,minLength=1,errorRequiredMsg="商品詳情不能為空!",errorMaxLengthMsg="商品詳情長(zhǎng)度不能大于32!",errorMinLengthMsg="商品詳情長(zhǎng)度不能小于1!")privateStringinfo;//商品的詳情@ValidateEntity(requiredMaxLength=true,maxLength=256,errorMaxLengthMsg="商品圖片路徑長(zhǎng)度不能大于256!")privateStringproductPic;//商品的圖片@ValidateEntity(required=true,requiredMinValue=true,requiredMaxValue=true,maxValue=100000000.00,minValue=0.00,errorRequiredMsg="商品價(jià)格不能為空!",errorMaxValueMsg="商品價(jià)格不合理,請(qǐng)調(diào)低價(jià)格!",errorMinValueMsg="商品價(jià)格不能低于0.00元!")privateBigDecimalprice;//商品的價(jià)格@ValidateEntity(required=true,requiredMinValue=true,requiredMaxValue=true,maxValue=100000000,minValue=0,errorRequiredMsg="商品庫(kù)存不能為空!",errorMaxValueMsg="商品庫(kù)存不合理,請(qǐng)調(diào)低庫(kù)存量!",errorMinValueMsg="商品庫(kù)存不能低于0個(gè)!")privateIntegerstock;//商品的庫(kù)存privateIntegersellNum;//商品的銷(xiāo)售數(shù)量privateIntegercommentNum;//商品的評(píng)論數(shù)量@ValidateEntity(required=true,errorRequiredMsg="該商品對(duì)應(yīng)的商品種類(lèi)不能為空!")privateLongcategoryId;//商品所屬的商品種類(lèi)idprivateProductCategoryproductCategory;//商品所屬的商品種類(lèi)privateDatecreateTime;//商品創(chuàng)建時(shí)間privateDateupdateTime;//商品更新時(shí)間4.1.4用戶(hù)User實(shí)體類(lèi)publicclassUser{privateLongid;//用戶(hù)id@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=8,minLength=1,errorRequiredMsg="用戶(hù)名稱(chēng)不能為空!",errorMaxLengthMsg="用戶(hù)名稱(chēng)長(zhǎng)度不能大于8!",errorMinLengthMsg="用戶(hù)名稱(chēng)長(zhǎng)度不能小于1!")privateStringusername;//用戶(hù)名稱(chēng)@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=16,minLength=6,errorRequiredMsg="密碼不能為空!",errorMaxLengthMsg="密碼長(zhǎng)度不能大于16!",errorMinLengthMsg="密碼長(zhǎng)度不能小于6!")privateStringpassword;//用戶(hù)密碼@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=64,minLength=1,errorRequiredMsg="電子郵箱不能為空!",errorMaxLengthMsg="電子郵箱長(zhǎng)度不能大于64!",errorMinLengthMsg="電子郵箱長(zhǎng)度不能小于1!")privateStringemail;//用戶(hù)電子郵箱@ValidateEntity(required=true,requiredMaxLength=true,requiredMinLength=true,maxLength=11,minLength=11,errorRequiredMsg="手機(jī)號(hào)碼不能為空!",errorMaxLengthMsg="請(qǐng)輸入11位手機(jī)號(hào)碼!",errorMinLengthMsg="請(qǐng)輸入11位手機(jī)號(hào)碼!")privateStringphone;//用戶(hù)手機(jī)號(hào)碼@ValidateEntity(requiredMaxLength=true,maxLength=256,errorMaxLengthMsg="頭像路徑長(zhǎng)度不能大于256!")privateStringheadPic;//用戶(hù)頭像privateDatecreateTime;//用戶(hù)信息創(chuàng)建時(shí)間privateDateupdateTime;//用戶(hù)信息更改時(shí)間4.3系統(tǒng)功能主要實(shí)現(xiàn)模塊截圖4.3.1項(xiàng)目首頁(yè)前臺(tái)地址:http://localhost:8080/home/system/index4.3.1首頁(yè)://表單數(shù)據(jù)序列化vardata=$('#login_form').serialize();$.ajax({url:'/home/user/login',data:data,type:'post',dataType:'json',success:function(data){if(data.code==0){setTokenToCookie(data.msg,7);window.location.href="/home/system/index";}else{layer.alert(data.msg,{icon:5});}},error:function(){layer.alert("網(wǎng)絡(luò)錯(cuò)誤,登錄失??!",{icon:5});}});4.3.2注冊(cè)頁(yè)面: @RequestMapping(value="/doRegist") @ResponseBody publicResultMapdoRegist(Useruser){ System.out.println(user); Useru=userService.getUserByPhoneAndName(user.getPhone(),null); if(u!=null){ returnresultMap.success().message("該手機(jī)號(hào)已注冊(cè)!"); } try{ user.setPassword(MD5.md5(user.getPassword())); user.setCreateTime(newDate()); userService.save(user); String[]ids=newString[1]; ids[0]=user.getId()+""; //普通用戶(hù) userRoleService.addUserRole(2,ids); returnresultMap.success().message("注冊(cè)成功"); }catch(Exceptione){ e.printStackTrace(); returnresultMap.fail().message("注冊(cè)失敗"); } }4.3.2主頁(yè)面系統(tǒng)首頁(yè)水果專(zhuān)區(qū)購(gòu)物車(chē)管理添加用戶(hù):我的訂單管理添加頁(yè)面菜單:輸入菜單名稱(chēng)、URL進(jìn)行保存添加。個(gè)人信息管理添加寵物信息:刪除寵物信息:修改密碼管理用戶(hù)評(píng)論收藏收貨地址管理4.3.4部分關(guān)鍵源碼展示:登錄模塊:/** *登錄表單驗(yàn)證處理 *@paramadmin *@paramcpacha *@return */ @RequestMapping(value="/login",method=RequestMethod.POST) @ResponseBody publicResponseVo<Boolean>login(Adminadmin,Stringcpacha,HttpServletRequestrequest){ if(admin==null){ returnResponseVo.errorByMsg(CodeMsg.DATA_ERROR); } if(StringUtil.isEmpty(cpacha)){ returnResponseVo.errorByMsg(CodeMsg.CPACHA_EMPTY); } Stringcorrect_cpacha=(String)request.getSession().getAttribute("admin_login"); //判斷驗(yàn)證碼是否過(guò)期 if(StringUtil.isEmpty(correct_cpacha)){ returnResponseVo.errorByMsg(CodeMsg.CPACHA_EXPIRE); } if(!cpacha.toLowerCase().equals(correct_cpacha.toLowerCase())){ returnResponseVo.errorByMsg(CodeMsg.CPACHA_ERROR); } //去數(shù)據(jù)庫(kù)查詢(xún)數(shù)據(jù)驗(yàn)證 AdminselectByNameAndPassword=adminMapper.selectByNameAndPassword(admin.getName(),admin.getPassword()); if(selectByNameAndPassword==null){ returnResponseVo.errorByMsg(CodeMsg.USERNAME_OR_PASSWORD_ERROR); } //驗(yàn)證該用戶(hù)是否被凍結(jié) if(selectByNameAndPassword.getState().intValue()==AdminStateEnum.STOP.getCode().intValue()){ returnResponseVo.errorByMsg(CodeMsg.USER_STATE_ERROR); } //驗(yàn)證該用戶(hù)是否無(wú)權(quán)限 List<Authority>selectByRoleId=authorityMapper.selectByRoleId(selectByNameAndPassword.getRoleId()); if(selectByRoleId==null||selectByRoleId.size()==0){ returnResponseVo.errorByMsg(CodeMsg.USER_AUTHORITY_ERROR); } //創(chuàng)建權(quán)限 request.getSession().setAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY,selectByNameAndPassword); returnResponseVo.success(true);springboot全局配置文件:################################################################################################################server.port=8080#1800sserver.servlet.session.timeout=1800spring.jackson.time-zone=GMT+8spring.jackson.date-format=yyyy-MM-ddHH:mm:ss#定義加載的配置文件files.active=dev###FREEMARKER#設(shè)置是否允許HttpServletRequest屬性重寫(xiě)(隱藏)控制器生成的同名模型屬性。spring.freemarker.allow-request-override=falsespring.freemarker.cache=falsespring.freemarker.check-template-location=truespring.freemarker.charset=UTF-8spring.freemarker.content-type=text/html#設(shè)置是否應(yīng)在與模板合并之前將所有請(qǐng)求屬性添加到模型中。spring.freemarker.expose-request-attributes=false#設(shè)置是否允許HttpSession屬性重寫(xiě)(隱藏)控制器生成的同名模型屬性。spring.freemarker.expose-session-attributes=false#設(shè)置是否公開(kāi)名為“SpringmacroRequestContext”的RequestContext供Spring的宏庫(kù)使用.spring.freemarker.expose-spring-macro-helpers=falsespring.freemarker.prefix=#spring.freemarker.request-context-attribute=#spring.freemarker.settings.spring.freemarker.settings.template_update_delay=0spring.freemarker.settings.default_encoding=UTF-8spring.freemarker.suffix=.ftlspring.freemarker.template-loader-path=classpath:/templates/#spring.freemarker.view-names=#whitelistofviewnamesthatcanberesolvedspring.freemarker.settings.number_format=0.##spring.servlet.multipart.max-file-size=300MBspring.servlet.multipart.max-request-size=300MBperties:#文件上傳路徑,文件存放的真實(shí)路徑FILEPATH=/tmp/files/#資源映射地址為file:D://User/file.location=file:/tmp/files/數(shù)據(jù)庫(kù)連接配置文件:#數(shù)據(jù)源的地址spring.datasource.url=jdbc:mysql://:3307/db_fruit_vegetable_shop?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=crit@2019spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.continue-on-error=falsespring.datasource.test-while-idle=true#獲取連接時(shí)候驗(yàn)證,會(huì)影響性能spring.datasource.test-on-borrow=false#在連接歸還到連接池時(shí)是否測(cè)試該連接spring.datasource.test-on-return=falsespring.datasource.validation-query=SELECT1FROMDUAL#空閑連接回收的時(shí)間間隔,與test-while-idle一起使用,設(shè)置5分鐘spring.datasource.time-between-eviction-runs-millis=300000#連接池空閑連接的有效時(shí)間,設(shè)置30分鐘spring.datasource.min-evictable-idle-time-millis=1800000spring.datasource.initial-size=5#指定連接池中最大的活躍連接數(shù).spring.datasource.max-active=50#指定連接池等待連接返回的最大等待時(shí)間,毫秒單位.spring.datasource.max-wait=60000#指定必須保持連接的最小值spring.datasource.min-idle=5#熱部署生效spring.devtools.restart.enabled=true#mybatis駝峰匹配開(kāi)啟mybatis.configuration.map-underscore-to-camel-case=true#控制臺(tái)日志配置mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl#mapper文件掃描路徑mybatis.mapper-locations=classpath*:mappers/admin/*.xml,classpath*:mappers/home/*.xml,classpath*:mappers/common/*.xml#mail配置spring.mail.host=tocol=smtpspring.mail.default-encoding=UTF-8spring.mail.username163.comspring.mail.password=LBWCLXTCZNGUMVMZspring.mail.test-connection=perties.mail.smtp.auth=perties.mail.smtp.starttls.enable=perties.mail.smtp.starttls.required=true#redis配置spring.redis.host=spring.redis.port=6379spring.redis.database=0#圖片上傳設(shè)置yjq.upload.photo.sufix=.jpg,.png,.gif,.jpeg#1024KByjq.upload.photo.maxsize=1024#200MB=204800KByjq.upload.attachment.maxsize=204800yjq.upload.photo.path=D:/IDEA_project/FruitAndVegetableShop/src/main/resources/upload/photo/yjq.upload.attachment.path=D:/IDEA_project/FruitAndVegetableShop/src/main/resources/upload/attachment/logback-spring.xml日志文件<?xmlversion="1.0"encoding="UTF-8"?><configuration> <appendername="consoleApp"class="ch.qos.logback.core.ConsoleAppender"><layoutclass="ch.qos.logback.classic.PatternLayout"><pattern>%date{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger{56}.%method:%L-%msg%n</pattern></layout></appender><appendername="fileInfoApp"class="ch.qos.logback.core.rolling.RollingFileAppender"><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%date{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger{56}.%method:%L-%msg%n</pattern></encoder><!--滾動(dòng)策略--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路徑--><fileNamePattern>app_log/log/.%d{yyyy-MM-dd}.log</fileNamePattern><!--重啟清理日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart><!--日志文件保留天數(shù)10天--><maxHistory>10</maxHistory></rollingPolicy></appender><appendername="fileErrorApp"class="ch.qos.logback.core.rolling.RollingFileAppender"><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>%date{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger{56}.%method:%L-%msg%n</pattern></encoder><!--設(shè)置滾動(dòng)策略--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路徑--><fileNamePattern>app_log/log/app.err.%d{yyyy-MM-dd}.log</fileNamePattern><!--重啟清理日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart><!--日志文件保留天數(shù)10天--><maxHistory>10</maxHistory></rollingPolicy></appender><rootlevel="INFO"><appender-refref="consoleApp"/><appender-refref="fileInfoApp"/><appender-refref="fileErrorApp"/></root></configuration>代碼主啟動(dòng)類(lèi):/***項(xiàng)目入口啟動(dòng)文件**/@SpringBootApplication@MapperScan({"grammer.dao.admin","grammer.dao.home","mon"})publicclassFruitAndVegetableShop{publicstaticvoidmain(String[]args){SpringApplication.run(FruitAndVegetableShop.class,args);}}過(guò)濾器實(shí)現(xiàn)類(lèi)://后臺(tái)管理員登錄攔截器無(wú)需攔截的urlArrays.asList:字符串?dāng)?shù)組轉(zhuǎn)化為L(zhǎng)ist publicstaticList<String>adminLoginExcludePathPatterns=Arrays.asList( "/admin/system/login", "/common/cpacha/generate_cpacha", "/admin/login/**", "/admin/common/**", "/admin/X-admin-2.2/**", "/home/css/**", "/home/common/**", "/home/font/**", "/home/images/**", "/home/js/**", "/home/system/js/slider.js", "/ueditor/**", "/photo/**" ); //前臺(tái)用戶(hù)登錄攔截器無(wú)需攔截的urlArrays.asList:字符串?dāng)?shù)組轉(zhuǎn)化為L(zhǎng)ist publicstaticList<String>userLoginExcludePathPatterns=Arrays.asList( "/admin/system/login", "/home/system/js/slider.js", "/common/cpacha/generate_cpacha", "/admin/login/**", "/admin/common/**", "/admin/X-admin-2.2/**", "/home/css/**", "/home/common/**", "/home/font/**", "/home/images/**", "/home/js/**", "/ueditor/**", "/photo/**" ); //前臺(tái)用戶(hù)訪(fǎng)問(wèn)需要攔截但無(wú)需驗(yàn)證的urlArrays.asList:字符串?dāng)?shù)組轉(zhuǎn)化為L(zhǎng)ist publicstaticList<String>userNotNeedConfirmUrl=Arrays.asList( "/home/system/index", "/home/user/login", "/home/user/register", "/home/product/fruit", "/home/product/vegetable", "/home/product/detail"4.4數(shù)據(jù)庫(kù)表設(shè)計(jì)4.4.0數(shù)據(jù)庫(kù)三范式要求:一、第一范式1NF是對(duì)屬性的原子性,要求屬性具有原子性,不可再分解;二、第二范式2NF是對(duì)記錄的唯一性,要求記錄有唯一標(biāo)識(shí),即實(shí)體的唯一性,即不存在部分依賴(lài);三、第三范式3NF是對(duì)字段的冗余性,要求任何字段不能由其他字段派生出來(lái),它要求字段沒(méi)有冗余,即不存在傳遞依賴(lài);四、反范式化一般說(shuō)來(lái),數(shù)據(jù)庫(kù)只需滿(mǎn)足第三范式(3NF)就行了。沒(méi)有冗余的數(shù)據(jù)庫(kù)設(shè)計(jì)可以做到。但是,沒(méi)有冗余的數(shù)據(jù)庫(kù)未必是最好的數(shù)據(jù)庫(kù),有時(shí)為了提高運(yùn)行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是:在概念數(shù)據(jù)模型設(shè)計(jì)時(shí)遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計(jì)時(shí)考慮。降低范式就是增加字段,允許冗余,達(dá)到以空間換時(shí)間的目的。〖例〗:有一張存放商品的基本表,“金額”這個(gè)字段的存在,表明該表的設(shè)計(jì)不滿(mǎn)足第三范式,因?yàn)椤敖痤~”可以由“單價(jià)”乘以“數(shù)量”得到,說(shuō)明“金額”是冗余字段。但是,增加“金額”這個(gè)冗余字段,可以提高查詢(xún)統(tǒng)計(jì)的速度,這就是以空間換時(shí)間的作法。在Rose2002中,規(guī)定列有兩種類(lèi)型:數(shù)據(jù)列和計(jì)算列。“金額”這樣的列被稱(chēng)為“計(jì)算列”,而“單價(jià)”和“數(shù)量”這樣的列被稱(chēng)為“數(shù)據(jù)列”。五、范式化設(shè)計(jì)和反范式化設(shè)計(jì)的優(yōu)缺點(diǎn)5.1范式化優(yōu)點(diǎn):缺點(diǎn):5.2反范式化優(yōu)點(diǎn):缺點(diǎn):數(shù)據(jù)庫(kù)采用mysql5版本、滿(mǎn)足數(shù)據(jù)庫(kù)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論