zoukankan      html  css  js  c++  java
  • 第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第四天】

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040

    第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】

    第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第三天】

    第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第四天】

    04.第四天(商品规格实现)


    一、#虚拟机桥接模式下重启后 Nginx需要手动启动

    cd /usr/local/nginx/sbin/
    ./nginx -s quit
    
    mkdir /var/run/nginx
    ./nginx -c /usr/local/nginx/conf/taotao-nginx.conf

    二、Maven -> Update Project

     

    三、使用Navicat查看在富文本编辑器添加商品后,数据库是否修改成功

    SELECT * FROM `tb_item` WHERE price =10000;

    使用模板

    每个商品对应一唯一的规格参数。在添加商品时,可以根据规格参数的模板。生成一个表单。保存规格参数时。还可以生成规格参数的json数据。保存到数据库中。

    实现流程

     

    Service层

    功能:接收商品分类id。调用mapper查询tb_item_param表,返回结果TaotaoResult。

    //商品的规格参数模板
    @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层

    接收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">
    ");
            sb.append("    <tbody>
    ");
            for(Map m1:jsonList) {
                sb.append("        <tr>
    ");
                sb.append("            <th class="tdTitle" colspan="2">"+m1.get("group")+"</th>
    ");
                sb.append("        </tr>
    ");
                List<Map> list2 = (List<Map>) m1.get("params");
                for(Map m2:list2) {
                    sb.append("        <tr>
    ");
                    sb.append("            <td class="tdTitle">"+m2.get("k")+"</td>
    ");
                    sb.append("            <td>"+m2.get("v")+"</td>
    ");
                    sb.append("        </tr>
    ");
                }
            }
            sb.append("    </tbody>
    ");
            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

    部分内容来自于学习编程期间收集于网络的免费分享资源和工作后购买的付费内容。
  • 相关阅读:
    AHK的OnMessage
    VBA7种文档遍历法
    Excel VBA 找出选定范围不重复值和重复值
    Excel图片调整大小
    Excel信息提取之二
    Excel不同工作簿之间提取信息
    VBA7种遍历方法
    Exce信息提取
    php笔记之文件载入和异常处理
    php笔记之流程控制
  • 原文地址:https://www.cnblogs.com/MarlonKang/p/11442477.html
Copyright © 2011-2022 走看看