感想
該項目是目前爲止,我寫過代碼量最多的項目了.....雖然清楚是沒有含金量的【跟着視頻來寫的】,但感受本身也在進步中......sql
寫的過程當中,出了很多的問題.....很是多的Servlet,JSP看得眼花.....數據庫
如今,想把該項目好好梳理一下要點,因而有了這篇博文....編程
E-R圖
該項目涉及到了5個表:user、orders、orderItem、category、book微信
難點
E-R圖設計中最難的地方就是作到訂單模塊那裏.....設計
難點一
首先,要明白爲何在訂單模塊中設計Orders和OrderItem表兩張表,而不是一張表Orders就搞掂了...固然了,這也可參考購物車案例的設計【Cart、CartItem】code
- 由於訂單模塊分了兩個部分,一部分是顯示普通的訂單信息【定單人、價錢、訂單時間、訂單狀態】
- 而在後臺中,咱們還要在顯示訂單普通訊息時,給予查看詳細信息的功能【也就是訂單的具體內容:具體的商品價錢、數量】
難點二:
訂單模塊我是最後纔開始寫的,訂單模塊和用戶模塊、圖書模塊都有相連,這就複雜了很多....cdn
- 一個用戶能夠擁有多個訂單
- 一個訂單對應多個訂單項
- 一本圖書對應多個訂單項
難點三:
- 在一對多和多對一的狀況下,咱們在考慮需不須要使用一方來維護另外一方的時候。在原則上,咱們都是使用多的一方來維護一的一方。
- 那爲何有的時候,上面這句話就不成立了呢??是這樣子的:當咱們一的方在頁面展現的時候,多的一方數據須要同時展現。此時,咱們就須要在一的一方使用集合來維護多的一方了。好比:咱們查看訂單的時候,就確定須要同時把全部的訂單項都查詢出來的。當查看購物車的時候,就確定須要同時把購物項查詢出來的
- 而咱們的分類與書籍就沒有同時這個概念。在頁面上,咱們是點擊分類,才須要把書籍查詢出來。所以,咱們是使用多的一方來維護一的一方。
- 若是使用了一的一方來維護多的一方的話,那麼通常都不必在多的一方來使用變量來維護一的一方了[參照訂單與訂單項]
Ps: 若是這部分有錯的地方請指出,謝謝!視頻
項目中遇到的要點
- 在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。
若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:Java3y對象