第04項目:淘淘商城(SpringMVC+Spring+Mybatis) 的學習實踐總結【第四天】

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) 的學習實踐總結【第四天】數據庫

 

04.第四天(商品規格實現)


 

1、#虛擬機橋接模式下重啓後 Nginx須要手動啓動

cd /usr/local/nginx/sbin/
./nginx -s quit

mkdir /var/run/nginx
./nginx -c /usr/local/nginx/conf/taotao-nginx.conf

2、Maven -> Update Project

 

 

3、使用Navicat查看在富文本編輯器添加商品後,數據庫是否修改爲功

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學習

package 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;
        }
    }

}
TaotaoResult

Controller層ui

接收cid參數。調用Service查詢規格參數模板。返回TaotaoResult。返回json數據。

//商品規格參數模板管理
@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;
    }

}
ItemParamController

 

 

4.2  提交規格參數模板

4.2.1   需求分析

首先把頁面中全部文本框中的內容轉換成json數據。把json字符串提交給後臺。保存到規格參數表中。

 

 

 

 

 


4.2.3   Service層

功能:接收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();
    }

 

4.2.4   Controller層

功能:接收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;
    }

 


 

6 保存商品的規格參數

提交表單以前,先把規格參數表單中的內容轉換成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();
    }
View Code

表現層

接收規格參數信息,調用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;
    }
View Code

 


7   展現規格參數

當現實商品詳情頁面時,須要把商品的規格參數根據商品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();
    }

}
View Code

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

相關文章
相關標籤/搜索