https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040html
第04項目:淘淘商城(SpringMVC+Spring+Mybatis) 的學習實踐總結【次日】java
第04項目:淘淘商城(SpringMVC+Spring+Mybatis) 的學習實踐總結【第三天】nginx
第04項目:淘淘商城(SpringMVC+Spring+Mybatis) 的學習實踐總結【第四天】數據庫
cd /usr/local/nginx/sbin/ ./nginx -s quit mkdir /var/run/nginx ./nginx -c /usr/local/nginx/conf/taotao-nginx.conf
SELECT * FROM `tb_item` WHERE price =10000;
使用模板json
每一個商品對應一惟一的規格參數。在添加商品時,能夠根據規格參數的模板。生成一個表單。保存規格參數時。還能夠生成規格參數的json數據。保存到數據庫中。app
實現流程
Service層編輯器
功能:接收商品分類id。調用mapper查詢tb_item_param表,返回結果TaotaoResult。ide
//商品的規格參數模板 @Service public class ItemParamServiceImpl implements ItemParamService { @Autowired private TbItemParamMapper itemParamMapper; @Override public TaotaoResult getItemParamByCid(long cid) { //根據條件查詢 TbItemParamExample example = new TbItemParamExample(); Criteria criteria = example.createCriteria(); criteria.andItemCatIdEqualTo(cid); List<TbItemParam> list = itemParamMapper.selectByExample(example); //判斷是否查詢到結果 if (list != null && list.size() > 0 ) { return TaotaoResult.ok(list.get(0)); } //返回一個自定義的封裝類對象 return TaotaoResult.ok(); }pojo學習
TaotaoResultpackage com.taotao.common.pojo; import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; /** * 淘淘商城自定義響應結構 */ public class TaotaoResult { // 定義jackson對象 private static final ObjectMapper MAPPER = new ObjectMapper(); // 響應業務狀態 private Integer status; // 響應消息 private String msg; // 響應中的數據 private Object data; public static TaotaoResult build(Integer status, String msg, Object data) { return new TaotaoResult(status, msg, data); } public static TaotaoResult ok(Object data) { return new TaotaoResult(data); } public static TaotaoResult ok() { return new TaotaoResult(null); } public TaotaoResult() { } public static TaotaoResult build(Integer status, String msg) { return new TaotaoResult(status, msg, null); } public TaotaoResult(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public TaotaoResult(Object data) { this.status = 200; this.msg = "OK"; this.data = data; } // public Boolean isOK() { // return this.status == 200; // } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } /** * 將json結果集轉化爲TaotaoResult對象 * * @param jsonData json數據 * @param clazz TaotaoResult中的object類型 * @return */ public static TaotaoResult formatToPojo(String jsonData, Class<?> clazz) { try { if (clazz == null) { return MAPPER.readValue(jsonData, TaotaoResult.class); } JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (clazz != null) { if (data.isObject()) { obj = MAPPER.readValue(data.traverse(), clazz); } else if (data.isTextual()) { obj = MAPPER.readValue(data.asText(), clazz); } } return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj); } catch (Exception e) { return null; } } /** * 沒有object對象的轉化 * * @param json * @return */ public static TaotaoResult format(String json) { try { return MAPPER.readValue(json, TaotaoResult.class); } catch (Exception e) { e.printStackTrace(); } return null; } /** * Object是集合轉化 * * @param jsonData json數據 * @param clazz 集合中的類型 * @return */ public static TaotaoResult formatToList(String jsonData, Class<?> clazz) { try { JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (data.isArray() && data.size() > 0) { obj = MAPPER.readValue(data.traverse(), MAPPER.getTypeFactory().constructCollectionType(List.class, clazz)); } return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj); } catch (Exception e) { return null; } } }Controller層ui
接收cid參數。調用Service查詢規格參數模板。返回TaotaoResult。返回json數據。
ItemParamController//商品規格參數模板管理 @Controller @RequestMapping("/item/param") public class ItemParamController { @Autowired private ItemParamService itemParamService; @RequestMapping("/query/itemcatid/{itemCatId}") @ResponseBody public TaotaoResult getItemParamByCid(@PathVariable Long itemCatId) { TaotaoResult result = itemParamService.getItemParamByCid(itemCatId); return result; } }
首先把頁面中全部文本框中的內容轉換成json數據。把json字符串提交給後臺。保存到規格參數表中。
功能:接收TbItemParam對象。 把對象調用mapper插入到tb_item_param表中。返回TaotaoResult。
@Override public TaotaoResult insertItemParam(TbItemParam itemParam) { //補全pojo itemParam.setCreated(new Date()); itemParam.setUpdated(new Date()); //插入到規格參數模板表 itemParamMapper.insert(itemParam); return TaotaoResult.ok(); }
功能:接收cid、規格參數模板。建立一TbItemParam對象。調用Service返回TaotaoResult。easyUI用的返回json數據。
ItemParamController
@RequestMapping("/save/{cid}") @ResponseBody public TaotaoResult insertItemParam(@PathVariable Long cid,String paramData) { //建立pojo對象 TbItemParam itemParam = new TbItemParam(); itemParam.setItemCatId(cid); itemParam.setParamData(paramData); TaotaoResult result = itemParamService.insertItemParam(itemParam); return result; }
提交表單以前,先把規格參數表單中的內容轉換成json數據而後跟商品基本信息、商品描述同時提交給後臺。保存至數據庫。
轉換後把規格參數的信息放到表單的hidden域中:
隨着表單的提交同時提交。
//添加規格參數的私有方法 private TaotaoResult insertItemParam(Long itemId, String itemParam) { Date date = new Date(); // 建立一個pojo TbItemParamItem itemParamItem = new TbItemParamItem(); itemParamItem.setItemId(itemId); itemParamItem.setParamData(itemParam); itemParamItem.setCreated(date); itemParamItem.setUpdated(date); // 向表中插入數據 itemParamItemMapper.insert(itemParamItem); return TaotaoResult.ok(); }
表現層
接收規格參數信息,調用Service層保存商品信息及商品描述及商品規格參數。返回taotaoResult
//添加商品和商品描述 @RequestMapping(value="/item/save",method = RequestMethod.POST) @ResponseBody private TaotaoResult createItem(TbItem item, String desc,String itemParams ) throws Exception{ //添加商品和商品描述以及規格參數 TaotaoResult result = itemService.createItem(item, desc,itemParams); return result; }
當現實商品詳情頁面時,須要把商品的規格參數根據商品id取出來,生成html展現到頁面。
7.1 Service
接收商品id查詢規格參數表。根據返回的規格參數生成html返回html
//展現商品規格參數 @Service public class ItemParamItemServiceImpl implements ItemParamItemService { @Autowired private TbItemParamItemMapper itemParamItemMapper; @Override public String getItemParamByItemId(Long itemID) { // 根據商品ID查詢規格參數 TbItemParamItemExample example = new TbItemParamItemExample(); Criteria criteria = example.createCriteria(); criteria.andItemIdEqualTo(itemID); //執行查詢 List<TbItemParamItem> list = itemParamItemMapper.selectByExampleWithBLOBs(example); if(list == null || list.size() == 0 ) { return ""; } //取規格參數信息 TbItemParamItem itemParamItem =list.get(0); String paramData = itemParamItem.getParamData(); //生成HTML //把規格參數json數據轉換成java對象 List<Map> jsonList = JsonUtils.jsonToList(paramData, Map.class); StringBuffer sb = new StringBuffer(); sb.append("<table cellpadding=\"0\" cellspacing=\"1\" width=\"100%\" border=\"0\" class=\"Ptable\">\n"); sb.append(" <tbody>\n"); for(Map m1:jsonList) { sb.append(" <tr>\n"); sb.append(" <th class=\"tdTitle\" colspan=\"2\">"+m1.get("group")+"</th>\n"); sb.append(" </tr>\n"); List<Map> list2 = (List<Map>) m1.get("params"); for(Map m2:list2) { sb.append(" <tr>\n"); sb.append(" <td class=\"tdTitle\">"+m2.get("k")+"</td>\n"); sb.append(" <td>"+m2.get("v")+"</td>\n"); sb.append(" </tr>\n"); } } sb.append(" </tbody>\n"); sb.append("</table>"); return sb.toString(); } }
7.2 Controller
接收商品id調用Service查詢規格參數信息,獲得規格參數的html。返回一個邏輯視圖。把html展現到頁面。
//展現商品規格參數 @Controller public class ItemParamItemController { @Autowired private ItemParamItemService itemParamItemService; @RequestMapping("/item/{itemId}") public String showItemParam(@PathVariable Long itemId, Model model) { String string = itemParamItemService.getItemParamByItemId(itemId); model.addAttribute("itemParam",string); return "item"; } }
=============================================
參考資料:
end