感想 該項目是目前為止,我寫過代碼量最多的項目了.....雖然清楚是沒有含金量的【跟著視頻來寫的】,但感覺自己也在進步中...... 寫的過程中,出了不少的問題.....非常多的Servlet,JSP看得眼花..... 現在,想把該項目好好梳理一下要點,於是有了這篇博文.... E R圖 該項目涉及 ...
感想
該項目是目前為止,我寫過代碼量最多的項目了.....雖然清楚是沒有含金量的【跟著視頻來寫的】,但感覺自己也在進步中......
寫的過程中,出了不少的問題.....非常多的Servlet,JSP看得眼花.....
現在,想把該項目好好梳理一下要點,於是有了這篇博文....
E-R圖
該項目涉及到了5個表:user、orders、orderItem、category、book
難點
E-R圖設計中最難的地方就是做到訂單模塊那裡.....
難點一
首先,要明白為什麼在訂單模塊中設計Orders和OrderItem表兩張表,而不是一張表Orders就搞掂了...當然了,這也可參考購物車案例的設計【Cart、CartItem】
- 因為訂單模塊分了兩個部分,一部分是顯示普通的訂單信息【定單人、價錢、訂單時間、訂單狀態】
- 而在後臺中,我們還要在顯示訂單普通信息時,給予查看詳細信息的功能【也就是訂單的具體內容:具體的商品價錢、數量】
難點二:
訂單模塊我是最後才開始寫的,訂單模塊和用戶模塊、圖書模塊都有相連,這就複雜了不少....
- 一個用戶可以擁有多個訂單
- 一個訂單對應多個訂單項
- 一本圖書對應多個訂單項
難點三:
- 在一對多和多對一的情況下,我們在考慮需不需要使用一方來維護另一方的時候。在原則上,我們都是使用多的一方來維護一的一方。
- 那為什麼有的時候,上面這句話就不成立了呢??是這樣子的:當我們一的方在頁面展示的時候,多的一方數據需要同時展示。此時,我們就需要在一的一方使用集合來維護多的一方了。比如:我們查看訂單的時候,就肯定需要同時把所有的訂單項都查詢出來的。當查看購物車的時候,就肯定需要同時把購物項查詢出來的
- 而我們的分類與書籍就沒有同時這個概念。在頁面上,我們是點擊分類,才需要把書籍查詢出來。因此,我們是使用多的一方來維護一的一方。
- 如果使用了一的一方來維護多的一方的話,那麼一般都沒必要在多的一方來使用變數來維護一的一方了[參照訂單與訂單項]
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