




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java家具商城平臺(tái)一、引言隨著國(guó)內(nèi)外信息技術(shù)的發(fā)展和信息時(shí)代的到來(lái),信息化、知識(shí)化、全球化已成為當(dāng)前經(jīng)濟(jì)發(fā)展的三大趨勢(shì)。人類(lèi)社會(huì)信息化將導(dǎo)致一場(chǎng)信息革命,它使我國(guó)政府和公眾對(duì)信息作用的認(rèn)識(shí)不斷深化。社會(huì)公眾通過(guò)信息網(wǎng)絡(luò)獲取信息的積極性日益提高。從近幾年來(lái)看,信息的快速發(fā)展為人們帶來(lái)的非常大的便利,我們可以直接通過(guò)互聯(lián)網(wǎng)了解到任何信息,也能非常輕松的購(gòu)買(mǎi)到任何商品。同時(shí)由于計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的應(yīng)用,人們的學(xué)習(xí)速度在不斷加快,從數(shù)字處理時(shí)代到微機(jī)時(shí)代,到現(xiàn)在的網(wǎng)絡(luò)化時(shí)代,學(xué)習(xí)速度越來(lái)越快,這要求我們的管理模式也要適應(yīng)新的特點(diǎn)和新的模式。信息技術(shù)的發(fā)展對(duì)人們學(xué)習(xí)知識(shí)、掌握知識(shí)、運(yùn)用知識(shí)提出了新的挑戰(zhàn)緒論1.1系統(tǒng)開(kāi)發(fā)背景隨著計(jì)算機(jī)和網(wǎng)絡(luò)的日趨普及和技術(shù)的飛速發(fā)展,越來(lái)越多的商家開(kāi)始研發(fā)和部署基于互聯(lián)網(wǎng)的應(yīng)用。建立自己的網(wǎng)站,發(fā)布商業(yè)信息,大刀闊斧的開(kāi)展電子商務(wù)?,F(xiàn)在琳瑯滿(mǎn)目的網(wǎng)店商品更是吸引著消費(fèi)者的眼球,消費(fèi)者通過(guò)電子商務(wù)足不出戶(hù)就能買(mǎi)到自己需要的并且是精心挑選的商品,方便、快捷又輕松。而對(duì)于商家來(lái)說(shuō),電商的經(jīng)營(yíng)模式是高效的、低成本的,所以對(duì)于商家來(lái)說(shuō)是有利可圖的。中國(guó)的家居用品行業(yè)迎來(lái)了大變革的大發(fā)展,需求量的擴(kuò)大讓國(guó)內(nèi)的家居行業(yè)建立起種類(lèi)齊全并與國(guó)際接軌的完整商業(yè)體系。國(guó)內(nèi)的專(zhuān)業(yè)人士也非??春眉揖有袠I(yè)的發(fā)展前景,認(rèn)為發(fā)展?jié)摿艽蟆A硗夂芏鄧?guó)外的企業(yè)也入住國(guó)內(nèi),在國(guó)內(nèi)得到較好的發(fā)展。家居行業(yè)也是中國(guó)制造業(yè)不可或缺的一部分,李克強(qiáng)總理提出中國(guó)制造2025綱領(lǐng),我們的家居行業(yè)也要響應(yīng)國(guó)家號(hào)召,為中國(guó)家居制造業(yè)創(chuàng)立一個(gè)良好的契機(jī),讓我們通過(guò)“三步走”實(shí)現(xiàn)制造強(qiáng)國(guó)的戰(zhàn)略目標(biāo)能夠順利完成。同時(shí)隨著結(jié)算方式的改變,以前的“送貨上門(mén)、到貨付款”或“郵寄上門(mén)、貸款郵資先付”的方式不僅浪費(fèi)了人力物力,而且限制了網(wǎng)絡(luò)的覆蓋范圍和商品的結(jié)構(gòu)種類(lèi),現(xiàn)在越來(lái)越多的人使用網(wǎng)上交易支付,它現(xiàn)在已經(jīng)能夠做到相對(duì)安全、方便快捷,給我們的生活帶來(lái)很大的便利。1.2系統(tǒng)開(kāi)發(fā)意義家居商品是在網(wǎng)上直接購(gòu)買(mǎi),有專(zhuān)門(mén)的人會(huì)把東西送到消費(fèi)者面前,通過(guò)虛擬的網(wǎng)站購(gòu)物商城可以讓消費(fèi)者足不出戶(hù)地輕松購(gòu)物,讓購(gòu)物的過(guò)程變得輕松、方便、快捷。電子商務(wù)系統(tǒng)由于具有營(yíng)業(yè)時(shí)間自由、店面空間不受限制、地理位置不受影響、資金周轉(zhuǎn)靈活、投資少回報(bào)快、消費(fèi)群體數(shù)量龐大等優(yōu)點(diǎn),因此得到了快速地發(fā)展,在現(xiàn)代社會(huì)的商務(wù)活動(dòng)中具有重要的作用。店鋪24小時(shí)不關(guān)門(mén)。網(wǎng)上家居商城可以讓消費(fèi)者在每天的任意時(shí)間段購(gòu)買(mǎi)店鋪貨架上提供的商品,不需要店員來(lái)照看店面。只要消費(fèi)者根據(jù)自己的喜好選擇了合適的商品,在線(xiàn)下下單,完成消費(fèi)過(guò)程就可以了。不受地理位置的影響。網(wǎng)購(gòu)購(gòu)物可以有效的屏蔽地理位置給消費(fèi)者帶來(lái)的影響。就商品的位置而言,假如通過(guò)網(wǎng)上消費(fèi)在深圳買(mǎi)一部手機(jī),消費(fèi)者只需通過(guò)網(wǎng)上商城下單,那么手機(jī)就會(huì)通過(guò)物流運(yùn)到消費(fèi)者的手里,不用消費(fèi)者到實(shí)體店里面慢慢挑選了,大大的節(jié)約時(shí)間和空間成本。不受店鋪空間的限制。哪怕只是街邊小店,在網(wǎng)上卻可以擁有百貨大樓那么大的店面,只要投資者愿意,可以擺上成千上萬(wàn)種商品。目前國(guó)內(nèi)最大的專(zhuān)業(yè)拍賣(mài)網(wǎng)站同時(shí)在線(xiàn)的商品要超過(guò)10萬(wàn)件,已超過(guò)一些大超市。解決了貨物積壓和存放的問(wèn)題。消費(fèi)者數(shù)量多?;ヂ?lián)網(wǎng)的普及,讓越來(lái)越多的人成為網(wǎng)民,其中,就中國(guó)而言,已經(jīng)連續(xù)5年成為世界上網(wǎng)民最高的國(guó)家。如此多的網(wǎng)名為網(wǎng)上消費(fèi)打下了基礎(chǔ)到現(xiàn)在,手機(jī)通信越來(lái)越發(fā)達(dá),隨身攜帶隨時(shí)購(gòu)物的便捷性的體現(xiàn),網(wǎng)上消費(fèi)將會(huì)更多。投資少,回報(bào)率高。網(wǎng)上開(kāi)店建店成本非常小,另外不會(huì)因?yàn)榛鼗\資金較慢影響貨品,商城可以通過(guò)在線(xiàn)銷(xiāo)售得到高回報(bào)。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è)這樣的基于Javaweb、springboot輕量級(jí)框架網(wǎng)頁(yè)版的家具商城系統(tǒng)。1.4.社會(huì)可行性在互聯(lián)網(wǎng)技術(shù)高速發(fā)展的今天,通過(guò)互聯(lián)網(wǎng)的傳播會(huì)讓企業(yè)更容易的創(chuàng)造更多的經(jīng)濟(jì)效益,通過(guò)網(wǎng)上銷(xiāo)售,有了更大的市場(chǎng),在這樣一個(gè)大環(huán)境下把資源統(tǒng)籌規(guī)化起來(lái),就會(huì)獲得高效的收益。1.5技術(shù)可行性springSpring框架是\t"/item/Spring%20Boot/_blank"Java平臺(tái)上的一種開(kāi)源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對(duì)編程模型沒(méi)有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來(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)特性,IOC旨在方便項(xiàng)目維護(hù)和測(cè)試,它提供了一種通過(guò)Java的反射機(jī)制對(duì)Java對(duì)象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對(duì)象的生命周期,容器可以通過(guò)掃描XML文件或類(lèi)上特定Java注解來(lái)配置對(duì)象,開(kāi)發(fā)者可以通過(guò)依賴(lài)查找或依賴(lài)注入來(lái)獲得對(duì)象。Spring框架具有\(zhòng)t"/item/Spring%20Boot/_blank"面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時(shí)運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無(wú)法與AspectJ框架相比,但通過(guò)與AspectJ的集成,也可以滿(mǎn)足基本需求。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、iBATS/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)有的StrutsWeb框架的呈現(xiàn)層和請(qǐng)求處理層之間以及請(qǐng)求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。SpringMVCSpringMVC框架是有一個(gè)MVC框架,通過(guò)實(shí)現(xiàn)Model-View-Controller模式來(lái)很好地將數(shù)據(jù)、業(yè)務(wù)與展現(xiàn)進(jìn)行分離。從這樣一個(gè)角度來(lái)說(shuō),SpringMVC和Struts、Struts2非常類(lèi)似。SpringMVC的設(shè)計(jì)是圍繞DispatcherServlet展開(kāi)的,DispatcherServlet負(fù)責(zé)將請(qǐng)求派發(fā)到特定的handler。通過(guò)可配置的handlermappings、viewresolution、locale以及themeresolution來(lái)處理請(qǐng)求并且轉(zhuǎn)到對(duì)應(yīng)的視圖。SpringMVC請(qǐng)求處理的整體流程如圖:mybatismybatis是對(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ù)交互時(shí),通過(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ù)SpringBootSpringBoot是由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。jQueryjQuery是一個(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+等MysqlMySQL是一款安全、跨平臺(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ā)。
需求分析2.1系統(tǒng)功能概述1)用戶(hù)注冊(cè)和登錄登錄功能:2)用戶(hù)信息的管理:3)商品的操作:4)購(gòu)物車(chē)的管理操作:5)訂單管理操作:6)商品類(lèi)型的管理7)商品的預(yù)覽、查看、搜索2.2系統(tǒng)運(yùn)行環(huán)境使用Windows7作為開(kāi)發(fā)的系統(tǒng)。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)試樣式、2.4技術(shù)難點(diǎn)系統(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ì)如下:3.1.1客戶(hù)端主要設(shè)計(jì)(1)用戶(hù)注冊(cè)和登錄登錄功能:①用戶(hù)的注冊(cè)功能:訪(fǎng)問(wèn)網(wǎng)站的人根據(jù)網(wǎng)站的提示注冊(cè)自己的賬戶(hù)②用戶(hù)的登錄功能:用戶(hù)可以輸入用戶(hù)名和密碼進(jìn)行登錄操作,當(dāng)沒(méi)有該賬戶(hù)的時(shí)候,提示錯(cuò)誤,用戶(hù)必須通過(guò)注冊(cè)完成或者從數(shù)據(jù)庫(kù)中獲取才能進(jìn)行會(huì)員權(quán)限級(jí)別的操作。登錄成功之后可以購(gòu)買(mǎi)商品,查詢(xún)訂單的詳細(xì)信息(2)、個(gè)人信息的管理:①用戶(hù)信息的修改操作,其中包括會(huì)員名、密碼、性別、聯(lián)系方式e-mail和個(gè)人介紹等用戶(hù)信息的修改操作。但是會(huì)員郵箱是綁定賬號(hào)的,會(huì)員郵箱不能進(jìn)行更改操作。②訂單管理操作:訂單只能查詢(xún)和刪除操作,不能有修改操作,修改操作是屬于管理員的權(quán)限。③用戶(hù)退出操作:當(dāng)點(diǎn)擊用戶(hù)退出時(shí),就會(huì)退出當(dāng)前用戶(hù)的登錄狀態(tài),恢復(fù)到游客狀態(tài)。(3)、商品的操作:①搜索商品操作:當(dāng)在Search欄輸入想搜索的家居用品時(shí),會(huì)使用模糊查詢(xún),搜索出客戶(hù)想到查詢(xún)的家居用品。②商品列表展示:在全部列表中會(huì)有很多分列表目錄,這些目錄都是不同的種類(lèi),當(dāng)我們點(diǎn)擊不同的目錄,就會(huì)查詢(xún)不同的商品。③商品詳細(xì)信息展示:會(huì)根據(jù)該目錄下的商品類(lèi)型展示出全部的商品。包括信息包括商品的圖片、價(jià)格、售價(jià)等信息。這些信息都不帶有分頁(yè),如果商品列表下的商品很多,就會(huì)分很多頁(yè)進(jìn)行分頁(yè)查詢(xún)。(4)、購(gòu)物車(chē)的管理操作:①顯示商品信息:當(dāng)我們一進(jìn)入購(gòu)物車(chē)頁(yè)面,就會(huì)顯示出商品的詳細(xì)信息,以及購(gòu)物車(chē)界面的功能信息。②修改商品的數(shù)量:用戶(hù)可以自己輸入不同數(shù)量的商品,當(dāng)商品的數(shù)量變動(dòng)時(shí),商品的庫(kù)存就會(huì)相應(yīng)的減少,也會(huì)根據(jù)商品的數(shù)量得到購(gòu)買(mǎi)這一種商品的金額小計(jì)。③刪除購(gòu)物車(chē)中的商品:當(dāng)我們點(diǎn)擊刪除時(shí),會(huì)彈出一個(gè)提示框提示我們是否刪除商品,當(dāng)點(diǎn)擊‘確定’,就刪除成功,點(diǎn)擊‘取消’,對(duì)話(huà)框消失并且沒(méi)有任何操作執(zhí)行。④購(gòu)物流程變動(dòng):從到了購(gòu)物車(chē)頁(yè)面,就會(huì)顯示購(gòu)物流程,當(dāng)每執(zhí)行一步操作,購(gòu)物流程就會(huì)相應(yīng)的變動(dòng)。5結(jié)賬操作:當(dāng)點(diǎn)擊結(jié)賬時(shí),如果沒(méi)有登錄,那么就會(huì)提醒登錄,如果登錄了,就會(huì)到結(jié)算中心界面進(jìn)行結(jié)算。3.1.2后臺(tái)管理員主要設(shè)計(jì)系統(tǒng)的后臺(tái)是專(zhuān)門(mén)為管理家居商城系統(tǒng)的人員設(shè)計(jì)的,功能如下:(1)、超級(jí)管理員:擁有管理該系統(tǒng)的最大權(quán)限,他有兩個(gè)特有的功能①數(shù)據(jù)字典:可以對(duì)后臺(tái)的不同分類(lèi)的分類(lèi)列表具有增刪改查的操作。②角色管理:將擁有不同權(quán)限的管理員分成不同的角色,每個(gè)不同角色有自己的權(quán)限,不能執(zhí)行越權(quán)操作,分配不同的權(quán)限的角色也是為了方便更好的管理。(2)、商品分類(lèi)的管理:①添加分類(lèi):點(diǎn)擊添加按鈕,會(huì)跳轉(zhuǎn)到分類(lèi)添加頁(yè)面,需要編寫(xiě)分類(lèi)名稱(chēng),分類(lèi)描述信息。②編輯分類(lèi):點(diǎn)擊編輯分類(lèi)按鈕,會(huì)跳轉(zhuǎn)到分類(lèi)編輯頁(yè)面,需要編寫(xiě)分類(lèi)名稱(chēng),分類(lèi)描述信息。另外會(huì)有數(shù)據(jù)回顯,當(dāng)什么都不操作時(shí),保持原來(lái)不變。③刪除分類(lèi):當(dāng)點(diǎn)擊刪除按鈕時(shí),會(huì)彈出一個(gè)提醒框,當(dāng)點(diǎn)擊確定,刪除分類(lèi),點(diǎn)擊取消,保持原來(lái)不變。(3)、商品管理功能:①查詢(xún)商品:查詢(xún)所有商品列表,還有通過(guò)商品的名稱(chēng)、商品的類(lèi)別和價(jià)格區(qū)間查詢(xún)指定商品或符合條件的商品,并且可以查詢(xún)商品的詳細(xì)信息。②添加商品:點(diǎn)擊添加商品會(huì)轉(zhuǎn)到添加商品頁(yè)面,需要提供商品名稱(chēng)、商品圖片、商品類(lèi)別、商品價(jià)格、庫(kù)存數(shù)量、商品描述等內(nèi)容。③修改商品:當(dāng)點(diǎn)擊編輯操作時(shí),修改商品的信息,包括商品名稱(chēng)、商品圖片、商品類(lèi)別、商品價(jià)格、庫(kù)存數(shù)量、商品描述等內(nèi)容④刪除商品:刪除已過(guò)時(shí)或者庫(kù)存為零的商品。3.4系統(tǒng)流程描述5項(xiàng)目源碼架構(gòu)系統(tǒng)實(shí)現(xiàn)4.1程序主要類(lèi)4.1.1用戶(hù)管理員類(lèi)@Data@EntitypublicclassAdminUserimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue@ColumnprivateIntegerid;@Column(nullable=false)privateStringusername;@ColumnprivateStringpassword;publicAdminUser(Integerid,Stringusername,Stringpassword){this.id=id;this.username=username;this.password=password;}publicAdminUser(){super();}4.1.4商品分類(lèi)/***分類(lèi)*/@EntitypublicclassClassificationimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***上級(jí)分類(lèi)Id*/@ColumnprivateIntegerparentId;/***分類(lèi)名稱(chēng)*/@ColumnprivateStringcname;/***類(lèi)型1一級(jí)分類(lèi)2二級(jí)分類(lèi)*/@ColumnprivateIntegertype;4.1.4訂單類(lèi)/***訂單*/@Entity@Table(name="`order`")publicclassOrderimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***訂單總價(jià)*/@ColumnprivateDoubletotal;/***訂單狀態(tài)1:未付款2:等待發(fā)貨3:等待收貨4:訂單完成*/@ColumnprivateIntegerstate;/***訂單時(shí)間*/@ColumnprivateDateorderTime;/***收貨人姓名*/@Column(name="`name`")privateStringname;/***收貨人聯(lián)系電話(huà)*/@ColumnprivateStringphone;/***收貨地址*/@ColumnprivateStringaddr;/***用戶(hù)Id*/@ColumnprivateIntegeruserId;4.1.4訂單項(xiàng)類(lèi)/***訂單項(xiàng)*/@EntitypublicclassOrderItemimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***訂單Id*/@ColumnprivateIntegerorderId;/***商品Id*/@ColumnprivateIntegerproductId;/***數(shù)量*/@ColumnprivateIntegercount;/***總價(jià)*/@ColumnprivateDoublesubTotal;@TransientprivateProductproduct;4.1.4商品類(lèi)@Entity@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})publicclassProductimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***商品標(biāo)題*/@ColumnprivateStringtitle;/***市場(chǎng)價(jià)*/@ColumnprivateDoublemarketPrice;/***商城價(jià)*/@ColumnprivateDoubleshopPrice;/***主圖*/@ColumnprivateStringimage;/***描述*/@Column(name="`desc`",columnDefinition="text")privateStringdesc;/***是否熱門(mén)商品*/@ColumnprivateIntegerisHot;/***二級(jí)分類(lèi)Id*/@ColumnprivateIntegercsid;/***商品創(chuàng)建日期*/@ColumnprivateDatepdate;4.1.4用戶(hù)客戶(hù)類(lèi)@EntitypublicclassUserimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***用戶(hù)名*/@ColumnprivateStringusername;/***密碼*/@ColumnprivateStringpassword;/***姓名*/@ColumnprivateStringname;/***郵件*/@ColumnprivateStringemail;/***電話(huà)*/@ColumnprivateStringphone;/***地址*/@ColumnprivateStringaddr;4.3系統(tǒng)功能主要實(shí)現(xiàn)模塊截圖4.3.1登陸頁(yè)面用戶(hù)輸入賬號(hào)和密碼和登錄進(jìn)行登錄4.3.1登錄關(guān)鍵代碼:/***登錄**@paramusername*@parampassword*/@RequestMapping("/login.do")publicvoidlogin(Stringusername,Stringpassword,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Useruser=userService.checkLogin(username,password);if(user!=null){//登錄成功重定向到首頁(yè)request.getSession().setAttribute("user",user);response.sendRedirect("/mall/index.html");}else{thrownewLoginException("登錄失?。∮脩?hù)名或者密碼錯(cuò)誤");}}4.3.2注冊(cè)頁(yè)面: /***注冊(cè)*/@RequestMapping("/register.do")publicvoidregister(Stringusername,Stringpassword,Stringname,Stringphone,Stringemail,Stringaddr,HttpServletResponseresponse)throwsIOException{Useruser=newUser();user.setUsername(username);user.setPhone(phone);user.setPassword(password);user.setName(name);user.setEmail(email);user.setAddr(addr);userService.create(user);//注冊(cè)完成后重定向到登錄頁(yè)面response.sendRedirect("/mall/user/toLogin.html");}4.3.2系統(tǒng)功能截圖系統(tǒng)主頁(yè)面是商品信息的展示、右側(cè)上方是用戶(hù)功能操作、沒(méi)有登錄的用戶(hù)可以選擇登錄或注冊(cè)操作才可以對(duì)商品進(jìn)行購(gòu)買(mǎi)、加入購(gòu)物車(chē)等操作選擇分類(lèi)查看家具商品信息用戶(hù)登錄注冊(cè)操作用戶(hù)可以查看我的訂單信息以及我的購(gòu)物車(chē)我的購(gòu)物車(chē)操作查看我的訂單信息后臺(tái)管理員用戶(hù)管理、可以對(duì)客戶(hù)用戶(hù)進(jìn)行添加、編輯、刪除操作編輯用戶(hù)信息編輯商品分類(lèi)列表編輯商品二級(jí)分類(lèi)列表編輯商品家具具體信息4.3.4部分關(guān)鍵源碼展示:登錄模塊:/***登錄**@paramusername*@parampassword*/@RequestMapping("/login.do")publicvoidlogin(Stringusername,Stringpassword,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Useruser=userService.checkLogin(username,password);if(user!=null){//登錄成功重定向到首頁(yè)request.getSession().setAttribute("user",user);response.sendRedirect("/mall/index.html");}else{thrownewLoginException("登錄失??!用戶(hù)名或者密碼錯(cuò)誤");}}springboot全局配置文件:#\u8BBF\u95EE\u8DEF\u5F84\uFF0C\u7AEF\u53E3\u914D\u7F6Eserver.context-path=/mallserver.port=8081#\u6587\u4EF6\u4E0A\u4F20\u914D\u7F6Espring.http.multipart.enabled=truespring.http.multipart.max-file-size=100MBspring.http.multipart.max-request-size=100MBlogging.level.priv.jesse.mall=DEBUG#\u914D\u7F6E\u8F6Cjson\u7684\u65F6\u95F4\u683C\u5F0Fspring.jackson.time-zone=GMT+8spring.jackson.date-format=yyyy-MM-ddHH:mm:ss#jdbc\u8FDE\u63A5\u914D\u7F6E#mysql#spring.datasource.url=jdbc:mysql://active.iceslurry.xyz/mall?useSSL=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull#spring.datasource.username=root#spring.datasource.password=123456#spring.datasource.driver-class-name=com.mysql.jdbc.Driver#H2spring.datasource.url=jdbc:mysql://localhost:3307/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=crit@2019spring.datasource.driver-class-name=com.mysql.jdbc.Driver#spring.h2.console.settings.web-allow-others=false#spring.h2.console.path=/h2-consolespring.datasource.type=com.alibaba.druid.pool.DruidDataSource#thymeleaf\u6A21\u677F\u5F15\u64CE\u8BBE\u7F6Espring.thymeleaf.mode=HTML5spring.thymeleaf.encoding=UTF-8spring.thymeleaf.content-type=text/html##\u5F00\u53D1\u65F6\u5173\u95ED\u7F13\u5B58,\u4E0D\u7136\u6CA1\u6CD5\u770B\u5230\u5B9E\u65F6\u9875\u9762spring.thymeleaf.cache=false#####################jpahibernate\u914D\u7F6E#########################spring.jpa.show-sql=falsespring.jpa.database=perties.hibernate.format_sql=falsespring.jpa.generate-ddl=true#\u6700\u5E38\u7528\u7684\u5C5E\u6027\uFF0C\u7B2C\u4E00\u6B21\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u4F1A\u81EA\u52A8\u5EFA\u7ACB\u8D77\u8868\u7684\u7ED3\u6784\uFF08\u524D\u63D0\u662F\u5148\u5EFA\u7ACB\u597D\u6570\u636E\u5E93\uFF09\uFF0C#\u4EE5\u540E\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u81EA\u52A8\u66F4\u65B0\u8868\u7ED3\u6784\uFF0C\u5373\u4F7F\u8868\u7ED3\u6784\u6539\u53D8\u4E86\u4F46\u8868\u4E2D\u7684\u884C\u4ECD\u7136\u5B58\u5728\u4E0D\u4F1A\u5220\u9664\u4EE5\u524D\u7684\u884C\u3002#\u8981\u6CE8\u610F\u7684\u662F\u5F53\u90E8\u7F72\u5230\u670D\u52A1\u5668\u540E\uFF0C\u8868\u7ED3\u6784\u662F\u4E0D\u4F1A\u88AB\u9A6C\u4E0A\u5EFA\u7ACB\u8D77\u6765\u7684\uFF0C\u662F\u8981\u7B49\u5E94\u7528\u7B2C\u4E00\u6B21\u8FD0\u884C\u8D77\u6765\u540E\u624D\u4F1A\u3002spring.jpa.hibernate.ddl-auto=update####################################################################################druid\u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u914D\u7F6E#############################\u914D\u7F6E\u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927spring.datasource.druid.initial-size=1spring.datasource.druid.max-active=20spring.datasource.druid.min-idle=1#\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4spring.datasource.druid.max-wait=60000#\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2spring.datasource.druid.time-between-eviction-runs-millis=60000#\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2spring.datasource.druid.min-evictable-idle-time-millis=300000spring.datasource.druid.validation-query=SELECT'x'spring.datasource.druid.test-on-borrow=falsespring.datasource.druid.test-on-return=falsespring.datasource.druid.test-while-idle=true#\u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F#\u5982\u679C\u7528Oracle\uFF0C\u5219\u628ApoolPreparedStatements\u914D\u7F6E\u4E3Atrue\uFF0Cmysql\u53EF\u4EE5\u914D\u7F6E\u4E3Afalse\u3002\u5206\u5E93\u5206\u8868\u8F83\u591A\u7684\u6570\u636E\u5E93\uFF0C\u5EFA\u8BAE\u914D\u7F6E\u4E3Afalse\u3002spring.datasource.druid.pool-prepared-statements=falsespring.datasource.druid.max-pool-prepared-statement-per-connection-size=20#druid\u76D1\u63A7\u914D\u7F6Espring.datasource.druid.filters=stat,slf4j#WebStatFilter\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidWiki\uFF0C\u914D\u7F6E_\u914D\u7F6EWebStatFilterspring.datasource.druid.web-stat-filter.enabled=truespring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=2000#StatViewServlet\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidWiki\uFF0C\u914D\u7F6E_StatViewServlet\u914D\u7F6Espring.datasource.druid.stat-view-servlet.enabled=truespring.datasource.druid.stat-view-servlet.url-pattern=/druid/*spring.datasource.druid.stat-view-servlet.reset-enable=truespring.datasource.druid.stat-view-servlet.login-username=druidspring.datasource.druid.stat-view-servlet.login-password=123456#Spring\u76D1\u63A7\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidGithubWiki\uFF0C\u914D\u7F6E_Druid\u548CSpring\u5173\u8054\u76D1\u63A7\u914D\u7F6Espring.datasource.druid.aop-patterns=priv.jesse.mall.service.impl.*#druid\u65E5\u5FD7\u8F93\u51FAspring.datasource.druid.filter.slf4j.enabled=truespring.datasource.druid.filter.slf4j.result-set-log-enabled=falsespring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=falsespring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=falsespring.datasource.druid.filter.slf4j.result-set-open-after-log-enabled=falsespring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false##################druid\u8FDE\u63A5\u6C60\u914D\u7F6E\u7ED3\u675F############################log4j2.xml日志配置文件:<?xmlversion="1.0"encoding="UTF-8"?><Configurationstatus="INFO"><Appenders><Consolename="Console"target="SYSTEM_OUT"><PatternLayoutpattern="%d{HH:mm:ss.SSS}[%-5level]%logger{36}-%message%n"/></Console><!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用--><Filename="log"fileName="log/test.log"append="true"><PatternLayoutpattern="%d{HH:mm:ss.SSS}%-5level%class{36}%L%M-%message%xEx%n"/></File></Appenders><Loggers><Rootlevel="INFO"><AppenderRefref="Console"/><AppenderRefref="log"/></Root></Loggers></Configuration>代碼主啟動(dòng)類(lèi):/***程序啟動(dòng)入口**@ServletComponentScan設(shè)置啟動(dòng)時(shí)spring能夠掃描到我們自己編寫(xiě)的servlet和filter,用于Druid監(jiān)控*@MapperScan("com.imlaidian.springbootdemo.dao")掃描mybatisMapper接口*@EnableScheduling啟用定時(shí)任務(wù)*@EnableTransactionManagement開(kāi)啟事務(wù)**@authorhfb*@date2017/9/1811:13*/@ServletComponentScan@EnableConfigurationProperties@EnableTransactionManagement@SpringBootApplicationpublicclassMallApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(MallApplication.class,args); }}權(quán)限攔截控制器:packagepriv.jesse.mall.filter;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.OutputStream;importjava.util.HashMap;/***權(quán)限攔截器**@authorhfb*@date2017/9/18*/@WebFilterpublicclassAuthorizationFilterimplementsFilter{publicAuthorizationFilter(){}privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(AuthorizationFilter.class);@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{}@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;//支持跨域訪(fǎng)問(wèn)response.setHeader("Access-Control-Allow-Origin","*");response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");response.setHeader("Access-Control-Max-Age","3600");response.setHeader("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept,X-Custom-Header");response.setHeader("X-Powered-By","SpringBoot");if("option".equalsIgnoreCase(request.getMethod())){responseJSON(response,newHashMap<>());return;}//除了攔截login.html其他html都攔截StringBufferurl=request.getRequestURL();//System.out.println(url);Stringpath=url.toString();//只攔截這些類(lèi)型請(qǐng)求if(path.endsWith(".do")||path.endsWith(".html")){//登錄,圖片不攔截if(path.endsWith("toLogin.html")||path.endsWith("toRegister.html")||path.endsWith("register.do")||path.endsWith("login.do")||path.endsWith("logout.do")||path.endsWith("error.html")||path.endsWith("checkUsername.do")||path.contains("/mall/admin/product/img/")||path.endsWith("index.html")||path.endsWith("classification/list.do")||path.contains("product")||path.contains("/mall/h2-console")){chain.doFilter(request,response);}else{processAccessControl(request,response,chain);}}else{//其他靜態(tài)資源都不攔截chain.doFilter(request,response);}}/***@paramrequest*@paramresponse*@paramchain*@throwsIOException*@throwsServletException*/privatevoidprocessAccessControl(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainchain)throwsIOException,ServletException{ObjectadminUser=request.getSession().getAttribute("login_user");Objectuser=request.getSession().getAttribute("user");Stringurl=request.getRequestURL().toString();if(url.indexOf("admin")!=-1){if(adminUser==null){response.sendRedirect("/mall/admin/toLogin.html");}else{chain.doFilter(request,response);}}else{if(user==null){response.sendRedirect("/mall/user/toLogin.html");}else{chain.doFilter(request,response);}}}@Overridepublicvoiddestroy(){}/***返回JOSN數(shù)據(jù)格式**@paramresponse*@paramobject*@throwsIOException*/publicstaticvoidresponseJSON(HttpServletResponseresponse,Objectobject)throwsIOException{response.setContentType("application/json;charset=utf-8");response.setCharacterEncoding("UTF-8");ObjectMappermapper=newObjectMapper();if(object==null)return;StringjsonStr=mapper.writeValueAsString(object);OutputStreamout=response.getOutputStream();out.write(jsonStr.getBytes("UTF-8"));out.flush();}}4.4數(shù)據(jù)庫(kù)表設(shè)計(jì)4.4.0數(shù)據(jù)庫(kù)三范式要求:一、第一范式1NF是對(duì)屬性的原子性,要求屬性具有原子性,不可再分解;表:字段1、字段2(字段2.1、字段2.2)、字段3......如學(xué)生(學(xué)號(hào),姓名,性別,出生年月日),如果認(rèn)為最后一列還可以再分成(出生年,出生月,出生日),它就不是一范式了,否則就是;二、第二范式2NF是對(duì)記錄的唯一性,要求記錄有唯一標(biāo)識(shí),即實(shí)體的唯一性,即不存在部分依賴(lài);表:學(xué)號(hào)、課程號(hào)、姓名、學(xué)分;這個(gè)表明顯說(shuō)明了兩個(gè)事務(wù):學(xué)生信息,課程信息;由于非主鍵字段必須依賴(lài)主鍵,這里學(xué)分依賴(lài)課程號(hào),姓名依賴(lài)與學(xué)號(hào),所以不符合二范式??赡軙?huì)存在問(wèn)題:數(shù)據(jù)冗余:,每條記錄都含有相同信息;刪除異常:刪除所有學(xué)生成績(jī),就把課程信息全刪除了;插入異常:學(xué)生未選課,無(wú)法記錄進(jìn)數(shù)據(jù)庫(kù);更新異常:調(diào)整課程學(xué)分,所有行都調(diào)整。正確做法:
學(xué)生:Student(學(xué)號(hào),姓名);
課程:Course(課程號(hào),學(xué)分);
選課關(guān)系:StudentCourse(學(xué)號(hào),課程號(hào),成績(jī))。三、第三范式3NF是對(duì)字段的冗余性,要求任何字段不能由其他字段派生出來(lái),它要求字段沒(méi)有冗余,即不存在傳遞依賴(lài);表:學(xué)號(hào),姓名,年齡,學(xué)院名稱(chēng),學(xué)院電話(huà)因?yàn)榇嬖谝蕾?lài)傳遞:(學(xué)號(hào))→(學(xué)生)→(所在學(xué)院)→(學(xué)院電話(huà))??赡軙?huì)存在問(wèn)題:數(shù)據(jù)冗余:有重復(fù)值;更新異常:有重復(fù)的冗余信息,修改時(shí)需要同時(shí)修改多條記錄,否則會(huì)出現(xiàn)數(shù)據(jù)不一致的情況
。正確做法:學(xué)生:(學(xué)號(hào),姓名,年齡,所在學(xué)院);學(xué)院:(學(xué)院,電話(huà))。四、反范式化一般說(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ù)設(shè)計(jì)三范式。編碼采用utf8--UTF-8Unicode排序規(guī)則采用utf8_general_ci4.4.1數(shù)據(jù)庫(kù)表ER圖4.4.2用戶(hù)表設(shè)計(jì)主要字段有:用戶(hù)名、密碼、郵箱、地址、個(gè)人信息、手機(jī)號(hào)等信息4.4.3商品分類(lèi)表設(shè)計(jì)主要字段有:id、上級(jí)id商品分類(lèi)名稱(chēng)、類(lèi)型等終端4.4.4用戶(hù)訂單表設(shè)計(jì)主要字段有:id、客戶(hù)收貨地址、姓名、收貨時(shí)間、手機(jī)號(hào)、狀態(tài)、數(shù)據(jù)量、用戶(hù)id等字段4.4.5商品表設(shè)計(jì)主要字段有:id、商品id、備注、商品圖片、商品價(jià)格、商品標(biāo)題、商品描述、時(shí)間等4.4.5訂單項(xiàng)表設(shè)計(jì)主要字段有:id、商品數(shù)量、訂單id、商品id、總價(jià)等4.4.6數(shù)據(jù)庫(kù)sql文件/*NavicatMySQLDataTransferSourceServer:jesse_rootSourceServerVersion:50713SourceHost:localhost:3306SourceDatabase:mallTargetServerType:MYSQLTargetServerVersion:50713FileEncoding
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年理財(cái)規(guī)劃師職業(yè)資格考試試題及答案
- 第29屆全國(guó)中學(xué)生物理競(jìng)賽復(fù)賽答案
- 模具產(chǎn)品攤費(fèi)用合同協(xié)議
- 商品意向金協(xié)議合同
- 啟迪堂培訓(xùn)合同協(xié)議
- 員工個(gè)人合同協(xié)議
- 品牌成立合同協(xié)議
- 品牌廣告制作合同協(xié)議
- 商場(chǎng)解約合同協(xié)議
- 民事租賃合同調(diào)節(jié)協(xié)議
- 2025年一級(jí)建造師之一建礦業(yè)工程實(shí)務(wù)題庫(kù)附答案(典型題)
- 履帶式起重機(jī)進(jìn)場(chǎng)驗(yàn)收表
- 汽車(chē)維修前臺(tái)接待流程參考指導(dǎo)
- 大數(shù)據(jù)驅(qū)動(dòng)的智慧社區(qū)建設(shè)研究
- 《人工智能生成合成內(nèi)容標(biāo)識(shí)辦法》知識(shí)講座
- 2024廣西公務(wù)員【申論A卷、C卷+2023申論A卷】共3套真題及答案
- 2024北京西城區(qū)初一(下)期末英語(yǔ)試題和答案
- 2024年廣東廣州黃埔區(qū)穗東街道政府聘員招聘筆試真題
- 電工電子技術(shù)(第3版) 課件 1.7 基爾霍夫定律
- 2024年度食品飲料品牌授權(quán)區(qū)域代理銷(xiāo)售合同書(shū)3篇
- 人音版音樂(lè)七年級(jí)上冊(cè)《友誼地久天長(zhǎng)》課件
評(píng)論
0/150
提交評(píng)論