今天:1.商品描述的保存(就是商品添加里面富文本編輯器裏面的內容保存到數據庫) 2.商品規格的添加及使用(i、使用多個表實現商品規格 ii、使用模板實現商品規格)html
每次打開maven工程有紅X就把工程選中,右鍵Maven---->Update Project。maven編譯的時候會出錯,它會涉及到maven中的一些引用不是同時加載這些配置而後就有錯誤。虛擬機關鍵halt----終止命令sql
後臺要接收前臺頁面提交的商品信息,及商品描述。商品信息保存還要保存商品描述。可是這個商品描述並不在商品信息表裏面數據庫
爲何要把商品表和商品描述分開存儲呢?由於商品描述是大文本信息,有時取商品只用展現商品信息,不用展現商品描述,把全部字段都取出來會浪費性能,電商裏面強調的就是單表查詢,之後分庫分表時會把一個表的多個字段拆成多個表來存儲就是爲了提升查詢效率的。json
要存首先得接收restful
dao層app
把商品信息保存到tb_item_desc表中。就是一個簡單的插入。可使用逆向生成的代碼jsp
service層數據庫設計
接收商品描述調用 dao 把商品描述插入到表中。
maven
參數:String 商品描述編輯器
返回值:TaotaoResult(不知道返回值是什麼就能夠用這個返回值用來顯示成功仍是失敗)
調用不能在controller,在controller裏面調用至關於兩個事務了。
Controller層
以前提交表單時把表單內容和富文本編輯器作了同步,因此提交時多加一個富文本編輯器的name=desc便可
啓動測試
把sql打印出來也能夠,把次日的log4j.properties這個文件扔到classpath下,再啓動時它會自動加載而後打印出來不少信息,作處理也會打印信息。
什麼是商品規格?對手機類來講規格是品牌,型號,顏色,上市時間,而對於服裝類可能就是尺寸,顏色這些。也就有了同一類商品的規格項是同樣的
規律:一、同一類商品的規格項相同(仍是有一點不一樣),規格項和商品關聯,規格項分組相同 二、不一樣商品規格參數的值是不一樣的
之後展現規格參數在網頁上面,首先得把這些數據存進來吧(什麼叫規格參數,就是規格項的值,即規格值),咱們如今作後臺,對後臺的修改就會影響未來前臺的網頁。如何存進來是比較難的,想起來也是亂糟糟的。
上面的商品表與商品規格項是多對多的關係,中間表商品規格參數表把二者聯繫起來。上面的左邊兩張表已經有了,缺的就是剩下的三張表了。
從新創建一個數據庫名字叫作mytest,使用第四天參考資料規格參數第一種解決方案.sql,建立出商品表(Tb_item)、商品分類表(Tb_item_cat)、一類中分組表(Tb_item_param_group)、一組中規格 項 表(Tb_item_param_value)這五張表。如今給出某個商品的id=12345,讓查出它全部的規格 項 對於的規格值。
方案一存在的問題
前面知道了商品分類決定了商品的分組狀況,因此能夠每一個商品分類對應一個規格參數模板。生成一個表單
保存規格參數時,還能夠生成規格參數的json數據,保存到數據庫中。
一、首先用戶生成一個模板並保存到數據庫,告訴用戶建立模板成功
二、維護商品時商品有一個商品分類,恰好商品分類與模板對應。由商品分類cid找到對應的模板,找到對應的json格式數據(表單呈現),而後你維護了規格參數(添加或刪除參數後)再把生成的規格信息(json)寫到規格信息表
三、未來用戶訪問商品詳情頁面時,根據商品信息取規格參數(取出來是json數據),而後把json轉換成html展現給用戶
這個也比較複雜,存儲並不複雜,複雜在代碼上面。須要把表單轉換成json,把json轉成表單再轉成html。
數據庫設計
如今表和表之間的的關係就很簡單了,商品的規格參數只跟商品id有關係,模板只和商品分類有關。
優勢:取的時候只須要單表取,不須要多表關聯了。若是要求新添加商品規格項發生改變,以前的商品不變能夠。
缺點:複雜的表單和json之間的轉換。對js的編寫要求很高。
下面對上面的時序圖實現
建立規格參數模板(¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥)
上面只需把商品ID,商品類目,規格,建立日期,更新日期取出來展現出來就能夠。咱們只作 新增 功能。
規格參數和商品分類是對應的,一個商品分類對應一個規格參數模板。
代碼過多,js跳轉過多,各類跳轉見筆記
這是一個restful風格的url
功能分析
請求url:/item/param/query/{itemcatid} 參數:itemCatId,從url中得到 返回值:TaotaoResult
Dao層
根據商品分類id查模板,就差模板表tb_item_param,查到了告訴你不用添加,沒查到就添加。單表操做,可使用逆向工程的代碼
Service層
功能:接收商品分類id,調用mapper查詢tb_item_param表,返回結果TaotaoResult。
Controller層
接收cid參數,調用Service查詢規格參數模板。返回TaotaoResult。返回json數據(下面@Controller()@RequestMapper("/item/param"))作修改
jsp
測試
提交規格參數模板(¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥)
提交前,首先把頁面中全部文本框中的內容轉換成 json 數據。把 json 字符串提交給後臺。保存到規格參數表中。看源碼
上圖,提交表單因此是post請求,後面跟參數,JSON.stringify的做用是把json格式的數據轉換成字符串,它是js內置的方法(js對象通常都是json格式的數據)
Dao層
保存規格參數模板,向tb_item_param表添加一條記錄。可使用逆向工程生成的代碼
Service層
功能:接收TbItemParam對象。把對象調用mapper插入到tb_item_param表中。返回TaotaoResult。
Controller層
功能:接收oid、規格參數模板。建立一TbItemParam對象。調用Service返回TaotaoResult。返回json
規格參數添加到數據庫雖然完了可是也只是完成了 上面 時序圖的第一個部分,後面還有三個(圖框的有問題)。
上面只是建立了一個模板,有了模板就要用模板。當咱們添加商品時要把這個模板讀出來,而後生成一個表單,供使用者添加規格參數,添加規格信息後保存成json到數據庫。 能夠理解一個商品對應一個模板,可是不是商品分類對應一個模板嗎?商品是否是有分類,分類對應模板,因此商品對應模板
很顯然這個功能應該在 商品添加 裏面作,商品添加昨天已經作了,但也只是簡單的把商品添加進去了,該商品的規格參數信息並無在模板中
分析
上面的方法:item/param/query/itemcatid/ 已經寫過了,只不過它只展現了選擇類目,如今要增長一個商品規格參數只須要在原來方法上作修改(多再數據庫中查詢一次便可)
service層
雖而後臺圖片很難看,後臺給本身人用的
在提交表單以前要把這些規格參數生成一個json數據,而後跟商品的基本信息、商品描述同時提交給後臺。保存至數據庫。下面源碼分析,之後遇到類似功能,能夠參考(抄)這些代碼
Dao層
須要向tb_item_param_item表中添加數據
service層
接收規格參數的內容和商品id。 拼裝成pojo調用mapper的方法tb_item_param_item表中添加數據返回TaotaoResult。下面service中也要注入一個TbItemParamItem
表現層Controller
接收規格參數信息,調用Service層保存商品信息及商品描述及商品規格參數。返回TaotaoResult
測試成功
展現商品詳情頁面的時候,把這些規格參數取出來,而後顯示到商品頁面上,固然這是前臺功能,前臺如今尚未實現,咱們如今寫一個jsp模擬一下。
當顯示商品詳情頁面時,須要把商品的規格參數根據商品的id取出來,生成html展現到頁面。
Dao層:根據商品id查詢商品規格參數,單表查詢,使用逆向工程生成的代碼就能夠了
Service層
接收商品id查詢規格參數表。根據返回的規格參數生成html返回html。代碼均略
controller層