摘要:存在則購物項(xiàng)的數(shù)量提供購買功能,參數(shù)是和。用戶想要購買商品時(shí),判斷用戶是否登陸了,還要判斷購物車是否存在購物車使用來保存,不存在則創(chuàng)建。得到未發(fā)貨的全部訂單和已發(fā)貨的全部訂單,其實(shí)就是檢索出不同狀態(tài)的全部訂單。
感想
該項(xiàng)目是目前為止,我寫過代碼量最多的項(xiàng)目了.....雖然清楚是沒有含金量的【跟著視頻來寫的】,但感覺自己也在進(jìn)步中......
寫的過程中,出了不少的問題.....非常多的Servlet,JSP看得眼花.....
現(xiàn)在,想把該項(xiàng)目好好梳理一下要點(diǎn),于是有了這篇博文....
E-R圖該項(xiàng)目涉及到了5個(gè)表:user、orders、orderItem、category、book
難點(diǎn)E-R圖設(shè)計(jì)中最難的地方就是做到訂單模塊那里.....
難點(diǎn)一首先,要明白為什么在訂單模塊中設(shè)計(jì)Orders和OrderItem表兩張表,而不是一張表Orders就搞掂了...當(dāng)然了,這也可參考購物車案例的設(shè)計(jì)【Cart、CartItem】
因?yàn)橛唵文K分了兩個(gè)部分,一部分是顯示普通的訂單信息【定單人、價(jià)錢、訂單時(shí)間、訂單狀態(tài)】
而在后臺(tái)中,我們還要在顯示訂單普通信息時(shí),給予查看詳細(xì)信息的功能【也就是訂單的具體內(nèi)容:具體的商品價(jià)錢、數(shù)量】
難點(diǎn)二:訂單模塊我是最后才開始寫的,訂單模塊和用戶模塊、圖書模塊都有相連,這就復(fù)雜了不少....
一個(gè)用戶可以擁有多個(gè)訂單
一個(gè)訂單對(duì)應(yīng)多個(gè)訂單項(xiàng)
一本圖書對(duì)應(yīng)多個(gè)訂單項(xiàng)
難點(diǎn)三:在一對(duì)多和多對(duì)一的情況下,我們?cè)诳紤]需不需要使用一方來維護(hù)另一方的時(shí)候。在原則上,我們都是使用多的一方來維護(hù)一的一方。
那為什么有的時(shí)候,上面這句話就不成立了呢??是這樣子的:當(dāng)我們一的方在頁面展示的時(shí)候,多的一方數(shù)據(jù)需要同時(shí)展示。此時(shí),我們就需要在一的一方使用集合來維護(hù)多的一方了。比如:我們查看訂單的時(shí)候,就肯定需要同時(shí)把所有的訂單項(xiàng)都查詢出來的。當(dāng)查看購物車的時(shí)候,就肯定需要同時(shí)把購物項(xiàng)查詢出來的
而我們的分類與書籍就沒有同時(shí)這個(gè)概念。在頁面上,我們是點(diǎn)擊分類,才需要把書籍查詢出來。因此,我們是使用多的一方來維護(hù)一的一方。
如果使用了一的一方來維護(hù)多的一方的話,那么一般都沒必要在多的一方來使用變量來維護(hù)一的一方了[參照訂單與訂單項(xiàng)]
Ps: 如果這部分有錯(cuò)的地方請(qǐng)指出,謝謝!
項(xiàng)目中遇到的要點(diǎn)在Tomcat中創(chuàng)建文件夾不能是manager,不然會(huì)出現(xiàn)403 Access Denied錯(cuò)誤
frameset標(biāo)簽是可以嵌套的,分列用“cols”,分行用“rows”,在src后指定target,后面request跳轉(zhuǎn)顯示的頁面都是在target指定的頁面上
實(shí)現(xiàn)分頁主要在Page類上編寫代碼,在DAO層中要獲取總記錄數(shù)、分頁數(shù)據(jù)。start和end參數(shù)是通過currentPage和linesize來計(jì)算出來的。
獲取分類后的分頁數(shù)據(jù),需要在DAO層中獲取分類后的總記錄數(shù),以分類作為WHERE條件得到分頁數(shù)據(jù)
提交表單中有上傳文件的話,我們可以使用FileUpload組件。普通字段我們使用BeanUtils的setProperty()來封裝數(shù)據(jù)到Bean對(duì)象上,文件我們就寫到服務(wù)端的指定目錄下
在分幀頁面上,如果首頁就要顯示數(shù)據(jù)了,我們可以在frame標(biāo)簽的src上指定的是Servlet,Servlet再跳轉(zhuǎn)回JSP,這樣JSP頁面就有數(shù)據(jù)了!
如果想要div不全是浮動(dòng),我們可以在后邊跟一個(gè)清除浮動(dòng)的div。
想要頁面上的按鈕能夠完成對(duì)應(yīng)的功能,需要用到JavaScript代碼,通過DOM編程得到對(duì)應(yīng)的數(shù)據(jù),使用window.location.href,讓它跳轉(zhuǎn)到對(duì)應(yīng)的Servlet上實(shí)現(xiàn)功能
Cart和CartIem的設(shè)計(jì)上,CartItem的總價(jià)是數(shù)量*價(jià)錢,Cart的總價(jià)是全部CartItem的價(jià)錢之和。
Cart應(yīng)該提供把商品加到購物車的功能,判斷該商品的購物項(xiàng)是否存在,不存在著創(chuàng)建并保存在里邊。存在則購物項(xiàng)的數(shù)量+1
BussinessService提供購買功能,參數(shù)是Cart和Book。
用戶想要購買商品時(shí),判斷用戶是否登陸了,還要判斷購物車是否存在【購物車使用Session來保存】,不存在則創(chuàng)建。
Mysql中不能將表命名為“order”,這樣會(huì)出錯(cuò)
訂單的基本信息可以在Cart和User中獲取,訂單項(xiàng)的基本信息可以在CartItem中獲取。因此,在BussinessService中需要Cart【通過Cart就可以找到CartItem了】和User參數(shù)。
在生成訂單的Dao中,需要把訂單的基本信息,訂單項(xiàng)的基本信息封裝到數(shù)據(jù)庫中
通過id查找訂單的時(shí)候,先找出訂單的基本信息。訂單表和用戶表聯(lián)結(jié),就可以查找出訂單的用戶。通過id也就可以查找出訂單中所有的訂單項(xiàng)了。最后把查找出來的數(shù)據(jù)全部封裝到訂單對(duì)象上。
想要讓未發(fā)貨的訂單變成已發(fā)貨,其實(shí)就是更新訂單的狀態(tài)。得到未發(fā)貨的全部訂單和已發(fā)貨的全部訂單,其實(shí)就是檢索出不同狀態(tài)的全部訂單。
在Dao層中,我們需要的參數(shù)往往是單一的,要么是具體的對(duì)象,要么就是id...然而在Service層中,我們要的參數(shù)是與該實(shí)體類相連的。
例子1:在生成訂單的時(shí)候,Dao層僅僅需要Order對(duì)象參數(shù)。在Service層中,Order需要把User、Cart的數(shù)據(jù)封裝到Order對(duì)象中,于是就需要了這兩個(gè)參數(shù)。
例子2:Cart提供了把商品添加到購物車的功能,參數(shù)只需要具體商品的id。而在Service中,它需要用戶的購物車對(duì)象和具體商品的id。
如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68603.html
摘要:前言鞏固開發(fā)模式,做一個(gè)比較完整的小項(xiàng)目成果圖該項(xiàng)目包含了兩個(gè)部分,前臺(tái)和后臺(tái)。前臺(tái)用于顯示后臺(tái)用于管理該項(xiàng)目可分為個(gè)模塊來組成分類模塊,用戶模塊,圖書模塊,購買模塊,訂單模塊。 前言 鞏固Servlet+JSP開發(fā)模式,做一個(gè)比較完整的小項(xiàng)目. 成果圖 該項(xiàng)目包含了兩個(gè)部分,前臺(tái)和后臺(tái)。 前臺(tái)用于顯示 showImg(https://segmentfault.com/img/remo...
數(shù)據(jù)庫 create database productstore character set utf8 collate utf8_bin; USE productstore; -- 用戶表 CREATE TABLE `user` ( `id` INT(11) AUTO_INCREMENT, `userName` VARCHAR(20) , `password` VARCHAR(20)...
摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...
摘要:而面向搜索引擎,就是我們要及時(shí)的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網(wǎng)絡(luò)尋找答案,你的坑大部分別人都已經(jīng)走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們?yōu)槭裁匆獙W(xué)習(xí)Java語言呢...
摘要:今天給大家介紹下周期性線程池的使用和重點(diǎn)源碼剖析。用來處理延時(shí)任務(wù)或定時(shí)任務(wù)定時(shí)線程池類的類結(jié)構(gòu)圖接收類型的任務(wù),是線程池調(diào)度任務(wù)的最小單位。周期性線程池任務(wù)的提交方式周期性有三種提交的方式。 之前學(xué)習(xí)ThreadPool的使用以及源碼剖析,并且從面試的角度去介紹知識(shí)點(diǎn)的解答。今天給大家介紹下周期性線程池的使用和重點(diǎn)源碼剖析。 ScheduledThreadPoolExecutor S...
閱讀 2348·2021-11-19 09:40
閱讀 1973·2021-11-08 13:24
閱讀 2514·2021-10-18 13:24
閱讀 2927·2021-10-11 10:57
閱讀 3630·2021-09-22 15:42
閱讀 1165·2019-08-29 17:11
閱讀 2595·2019-08-29 16:11
閱讀 2461·2019-08-29 11:11