感想
該項目是目前爲止,我寫過代碼量最多的項目了…..雖然清楚是沒有含金量的【跟着視頻來寫的】,但感受本身也在進步中…..sql
寫的過程當中,出了很多的問題…..很是多的Servlet,JSP看得眼花…..數據庫
如今,想把該項目好好梳理一下要點,因而有了這篇博文….編程
E-R圖
該項目涉及到了5個表:user、orders、orderItem、category、bookmarkdown
難點
E-R圖設計中最難的地方就是作到訂單模塊那裏…..設計
難點一
首先,要明白爲何在訂單模塊中設計Orders和OrderItem表兩張表,而不是一張表Orders就搞掂了…固然了,這也可參考購物車案例的設計【Cart、CartItem】code
- 由於訂單模塊分了兩個部分,一部分是顯示普通的訂單信息【定單人、價錢、訂單時間、訂單狀態】
- 而在後臺中,咱們還要在顯示訂單普通訊息時,給予查看詳細信息的功能【也就是訂單的具體內容:具體的商品價錢、數量】
難點二:
訂單模塊我是最後纔開始寫的,訂單模塊和用戶模塊、圖書模塊都有相連,這就複雜了很多….視頻
- 一個用戶能夠擁有多個訂單
- 一個訂單對應多個訂單項
- 一本圖書對應多個訂單項
難點三:
在實體的設計上,通常地,一對多的關係咱們都是在多的類上使用變量了來記住一的關係。例如:在分類和圖書一對多的關係中,我就是在Book類用category_id來記住分類的關係對象
可是呢,在訂單和訂單項的關係中,這樣是行不通的。圖片
- 不能在訂單項類上用一個變量來記住訂單【咱們在前臺生成訂單,普通的訂單信息能夠直接生成。當咱們想查看詳細信息時,是不能把訂單和訂單項鍊接起來,從而獲得訂單項的具體信息的】
- 因此說,當生成訂單的時候,也應該把全部訂單項也一塊兒封裝到訂單中…所以,咱們這樣作:在訂單中維護一個Set集合來裝載着全部的訂單項..
- 這也有購物車案例的味道【Cart使用Map集合來存儲CartItem】….
項目中遇到的要點
- 在Tomcat中建立文件夾不能是manager,否則會出現403 Access Denied錯誤
- frameset標籤是能夠嵌套的,分列用「cols」,分行用「rows」,在src後指定target,後面request跳轉顯示的頁面都是在target指定的頁面上
- 實現分頁主要在Page類上編寫代碼,在DAO層中要獲取總記錄數、分頁數據。start和end參數是經過currentPage和linesize來計算出來的。
- 獲取分類後的分頁數據,須要在DAO層中獲取分類後的總記錄數,以分類做爲WHERE條件獲得分頁數據
- 提交表單中有上傳文件的話,咱們可使用FileUpload組件。普通字段咱們使用BeanUtils的setProperty()來封裝數據到Bean對象上,文件咱們就寫到服務端的指定目錄下
- 在分幀頁面上,若是首頁就要顯示數據了,咱們能夠在
frame
標籤的src上指定的是Servlet,Servlet再跳轉回JSP,這樣JSP頁面就有數據了!
- 若是想要div不全是浮動,咱們能夠在後邊跟一個清除浮動的div。
<div style="clear: both"></div>
- 想要頁面上的按鈕可以完成對應的功能,須要用到JavaScript代碼,經過DOM編程獲得對應的數據,使用
window.location.href
,讓它跳轉到對應的Servlet上實現功能
- Cart和CartIem的設計上,CartItem的總價是數量*價錢,Cart的總價是所有CartItem的價錢之和。
- Cart應該提供把商品加到購物車的功能,判斷該商品的購物項是否存在,不存在着建立並保存在裏邊。存在則購物項的數量+1
- BussinessService提供購買功能,參數是Cart和Book。
- 用戶想要購買商品時,判斷用戶是否登錄了,還要判斷購物車是否存在【購物車使用Session來保存】,不存在則建立。
- Mysql中不能將表命名爲「order」,這樣會出錯
- 訂單的基本信息能夠在Cart和User中獲取,訂單項的基本信息能夠在CartItem中獲取。所以,在BussinessService中須要Cart【經過Cart就能夠找到CartItem了】和User參數。
- 在生成訂單的Dao中,須要把訂單的基本信息,訂單項的基本信息封裝到數據庫中
- 經過id查找訂單的時候,先找出訂單的基本信息。訂單表和用戶表聯結,就能夠查找出訂單的用戶。經過id也就能夠查找出訂單中全部的訂單項了。最後把查找出來的數據所有封裝到訂單對象上。
- 想要讓未發貨的訂單變成已發貨,其實就是更新訂單的狀態。獲得未發貨的所有訂單和已發貨的所有訂單,其實就是檢索出不一樣狀態的所有訂單。
- 在Dao層中,咱們須要的參數每每是單一的,要麼是具體的對象,要麼就是id…然而在Service層中,咱們要的參數是與該實體類相連的。
- 例子1:在生成訂單的時候,Dao層僅僅須要Order對象參數。在Service層中,Order須要把User、Cart的數據封裝到Order對象中,因而就須要了這兩個參數。
- 例子2:Cart提供了把商品添加到購物車的功能,參數只須要具體商品的id。而在Service中,它須要用戶的購物車對象和具體商品的id。