当前位置: 首页 > wzjs >正文

led外贸网站国家职业技能培训学校

led外贸网站,国家职业技能培训学校,三网合一 做网站,邢台营销型网站建设我们平时在网上购物,一般都会有购物车,支持买多件商品,每个商品可以买不同数量。 购物车常见实现方式: (1)、存储到数据库:性能存在瓶颈。 (2)、后端存储到缓存如redi…

我们平时在网上购物,一般都会有购物车,支持买多件商品,每个商品可以买不同数量。

购物车常见实现方式:

(1)、存储到数据库:性能存在瓶颈。

(2)、后端存储到缓存如redis:支持高性能处理,可以开启AOF持久化防止重启丢失。

购物车数据结构介绍:

购物车结构是一个双层Map,Map<String,Map<String,String>>,第一层Map,Key是用户id;第二层Map,Key是购物车中商品id,值是购物车数据

所以今天我们使用redis的Hash结构来实现购物车,包括添加、查看和清空!

首先我们要准备相关类和数据准备。

VideoDO类:

public class VideoDO {private int id;private String title;private String img;private int price;public VideoDO() {}public VideoDO(int id, String title, String img, int price) {this.id = id;this.title = title;this.img = img;this.price = price;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getImg() {return img;}public void setImg(String img) {this.img = img;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}
}

     CartItemVO类(购物项):

    public class CartItemVO {//商品idprivate Integer productId;//购买数量private Integer buyNum;//商品标题private String productTitle;//图片private String productImg;//商品单价private int price ;//总价格,单价+数量private int totalPrice;public int getProductId() {return productId;}public void setProductId(int productId) {this.productId = productId;}public Integer getBuyNum() {return buyNum;}public void setBuyNum(Integer buyNum) {this.buyNum = buyNum;}public String getProductTitle() {return productTitle;}public void setProductTitle(String productTitle) {this.productTitle = productTitle;}public String getProductImg() {return productImg;}public void setProductImg(String productImg) {this.productImg = productImg;}/*** 商品单价 * 购买数量* @return*/public int getTotalPrice() {return this.price*this.buyNum;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public void setTotalPrice(int totalPrice) {this.totalPrice = totalPrice;}
    }
    

    CartVO类(购物车):

    public class CartVO {//购物项private List<CartItemVO> cartItems;//购物车总价格private Integer totalAmount;//总价格public int getTotalAmount() {return cartItems.stream().mapToInt(CartItemVO::getTotalPrice).sum();}public List<CartItemVO> getCartItems() {return cartItems;}public void setCartItems(List<CartItemVO> cartItems) {this.cartItems = cartItems;}
    }
    

    数据源层(这里我们为了方便实现,我们省略service层):

    @Repository
    public class VideoDao {private static Map<Integer, VideoDO> map = new HashMap<>();static {map.put(1,new VideoDO(1,"综合项目实战","hhhh",1000));map.put(2,new VideoDO(2,"RabbitMQ实战","llll",479));map.put(3,new VideoDO(3,"Java基础","xxxx",449));map.put(4,new VideoDO(4,"玩转Nginx","yyyy",549));map.put(5,new VideoDO(5,"ssm课程","oooo",649));map.put(6,new VideoDO(6,"SpringCloud实战","zzzz",559));}// 模拟从数据库找public VideoDO findDetailById(int videoId) {return map.get(videoId);}
    }
    

    json工具类:

    public class JsonUtil {// 定义jackson对象private static final ObjectMapper MAPPER = new ObjectMapper();/*** 将对象转换成json字符串。* @return*/public static String objectToJson(Object data) {try {String string = MAPPER.writeValueAsString(data);return string;} catch (Exception e) {e.printStackTrace();}return null;}/*** 将json结果集转化为对象* @param jsonData json数据* @param beanType 对象中的object类型* @return* @param <T>*/public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {try {T t = MAPPER.readValue(jsonData, beanType);return t;} catch (Exception e) {e.printStackTrace();}return null;}
    }

    准备工作做好啦,下面我们来实现添加购物车接口的开发:

    @RestController
    @RequestMapping("/api/v1/cart")
    public class CartController {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate VideoDao videoDao;@RequestMapping("add")//一般我们添加购物车需要商品的id和购买的数量public JsonData addCart(int videoId,int buyNum){//获取购物车BoundHashOperations<String, Object, Object> myCart = getMyCartOps();//+“”是为了将videoId变成字符串Object cacheObj = myCart.get(videoId+"");//购物车没有这个商品if(cacheObj == null){CartItemVO cartItemVO = new CartItemVO();VideoDO videoDO = videoDao.findDetailById(videoId);cartItemVO.setBuyNum(buyNum);cartItemVO.setProductId(videoId);cartItemVO.setPrice(videoDO.getPrice());cartItemVO.setProductImg(videoDO.getImg());cartItemVO.setProductTitle(videoDO.getTitle());myCart.put(videoId+"", JsonUtil.objectToJson(cartItemVO));}else {//购物车有这个商品,增加商品购买数量String result = (String) cacheObj;CartItemVO cartItemVO = JsonUtil.jsonToPojo(result, CartItemVO.class);cartItemVO.setBuyNum(cartItemVO.getBuyNum()+buyNum);myCart.put(videoId+"", JsonUtil.objectToJson(cartItemVO));}return JsonData.buildSuccess();}// 抽取我的购物车通用方法private BoundHashOperations<String,Object,Object> getMyCartOps(){String key = getCartKey();return redisTemplate.boundHashOps(key);}//获取购物车的keyprivate String getCartKey(){//用户的id,一般从拦截器获取,这里为了方便,写死即可,每个用户不一样int userId = 66;String cartKey = String.format("video:cart:%s",userId);return cartKey;}
    }
    

    我们去浏览器输入http://localhost:8080/api/v1/cart/add?videoId=1&buyNum=2,我们可以去redis可视化查看到视频商品id是1的,购买数量是2件,总价格是2000。

    我们再次访问http://localhost:8080/api/v1/cart/add?videoId=1&buyNum=2这个网址,视频商品id是1的,购买数量变成4件,总价格变成4000。

    下面我们就来实现查看我的购物车接口开发:

    /*** 查看我的购物车* @return*/@RequestMapping("myCart")public JsonData getMyCart(){//获取购物车BoundHashOperations<String, Object, Object> myCart = getMyCartOps();List<Object> itemList = myCart.values();List<CartItemVO> cartItemVOList = new ArrayList<>();for(Object item : itemList){CartItemVO cartItemVO = JsonUtil.jsonToPojo((String) item,CartItemVO.class);cartItemVOList.add(cartItemVO);}CartVO cartVO = new CartVO();cartVO.setCartItems(cartItemVOList);return JsonData.buildSuccess(cartVO);}

    当我们去访问该接口时,就可以查询到我的购物车有什么商品。

     

    最后我们来开发一下清空购物车:

    /*** 清空我的购物车* @return*/@RequestMapping("clear")public JsonData clear(){String key = getCartKey();redisTemplate.delete(key);return JsonData.buildSuccess();}

     清空购物车之后查看我的购物车就是空的。

     

     

     

     

     

     

    http://www.dtcms.com/wzjs/484992.html

    相关文章:

  • 滨州网站开发网站上不去首页seo要怎么办
  • 白山做网站沈阳关键词seo排名
  • wordpress仪表盘添加内容市场seo是什么
  • 营销型网站的功能如何免费做网站网页
  • 微网站 底部导航菜单无锡网站建设
  • dedecms旅游网站模板微软优化大师
  • 优秀网页设计代码东莞网站建设优化
  • 微信小程序怎么做网站最好的免费推广平台
  • 国内免费视频素材无水印素材网站google下载手机版
  • 如何用vs2010做网站seo每日
  • 公司转让费用seo专业培训费用
  • 手机网站一般做多大尺寸百度seo官方网站
  • 网站开发实用技术pdf怎么做链接推广产品
  • 增城高端定制网站建设正规推广赚佣金的平台
  • 定制网站建设公司有哪些搜索排名广告营销怎么做
  • 上海做网站多少钱查域名
  • jsp动态网站开发视频教程深圳高端网站建设公司
  • 3 建设营销型网站流程图自动的网站设计制作
  • app下载我的订单seo中国是什么
  • 用jsp加点mvc做网站怎么样郑州做网站推广资讯
  • 淘宝客网站搜索怎么做百度收录链接
  • 荥阳市建设局 网站百度文库首页
  • 佛山行业网站设计公司下载百度app免费下载安装
  • 做百度网站那家好seo网站排名助手
  • 甘肃找人做网站多少钱厦门人才网唯一官网
  • 新沂网站建设公司网站提交收录软件
  • wordpress php5.6知乎推广优化
  • 公司注销网站备案申请表宁波seo公司排名榜
  • 做网站seo优化的公司营销推广模式有哪些
  • wordpress特殊主题关键词设置汕头百度seo公司