购物车的原理及Java实现(仿京东实现原理)

本文详细介绍了购物车的实现原理,包括未登录时商品存储在Cookie中,登录后存储在Redis中,避免使用Session占用服务器内存。文章通过Java代码展示了BuyerCart和BuyerItem类的设计,以及如何将对象转换为JSON格式存储在Cookie中。还讨论了登录状态判断、Redis中存储购物车的逻辑以及商品添加到购物车的处理过程。
摘要由CSDN通过智能技术生成

3)用户登录, 添加商品,此时商品被添加到数据库做了持久化存储, 再次打开登录用户名和密码, 该用户选择的商品肯定还是存在的, 所以购物车中的商品还是存在的.

4)理由3)

这里再说下 没登录 保存商品到Cookie的优点以及保存到Session和数据库的对比:

1:Cookie: 优点: 保存用户浏览器(不用浪费我们公司的服务器) 缺点:Cookie禁用,不提供保存

2:Session:(Redis : 浪费大量服务器内存:实现、禁用Cookie)  速度很快

3:数据库(Mysql、Redis、SOlr)  能持久化的就数据库  速度太慢

那么我今天要讲的就是:

  • 用户没登陆:购物车添加到Cookie中

  • 用户登陆: 保存购物车到Redis中  (不用数据库)

整体的思路图解:

接下来就是代码实例来实现 购物车的功能了:

首先我们看下购物车和购物项两个JavaBean的设计:

购物车: buyerCart.java

1 public class BuyerCart implements Serializable{

2

3     /**

4      * 购物车

5      */

6     private static final long serialVersionUID = 1L;

7

8     //商品结果集

9     private List items = new ArrayList();

10

11     //添加购物项到购物车

12     public void addItem(BuyerItem item){

13         //判断是否包含同款

14         if (items.contains(item)) {

15             //追加数量

16             for (BuyerItem buyerItem : items) {

17                 if (buyerItem.equals(item)) {

18                     buyerItem.setAmount(item.getAmount() + buyerItem.getAmount());

19                 }

20             }

21         }else {

22             items.add(item);

23         }

24

25     }

26

27     public List getItems() {

28         return items;

29     }

30

31     public void setItems(List items) {

32         this.items = items;

33     }

34

35

36     //小计

37     //商品数量

38     @JsonIgnore

39     public Integer getProductAmount(){

40         Integer result = 0;

41         //计算

42         for (BuyerItem buyerItem : items) {

43             result += buyerItem.getAmount();

44         }

45         return result;

46     }

47

48     //商品金额

49     @JsonIgnore

50     public Float getProductPrice(){

51         Float result = 0f;

52         //计算

53         for (BuyerItem buyerItem : items) {

54             result += buyerItem.getAmount()*buyerItem.getSku().getPrice();

55         }

56         return result;

57     }

58

59     //运费

60     @JsonIgnore

61     public Float getFee(){

62         Float result = 0f;

63         //计算

64         if (getProductPrice() < 79) {

65             result = 5f;

66         }

67

68         return result;

69     }

70

71     //总价

72     @JsonIgnore

73     public Float getTotalPrice(){

74         return getProductPrice() + getFee();

75     }

76

77 }

这里使用了@JsonIgonre注解是因为下面需要将BuyerCart 转换成Json格式, 而这几个字段只有get 方法, 所以不能转换, 需要使用忽略Json.

下面是购物项: buyerItem.java

1 public class BuyerItem implements Serializable{

2

3     private static final long serialVersionUID = 1L;

4

5     //SKu对象

6     private Sku sku;

7

8     //是否有货

9     private Boolean isHave = true;

10

11     //购买的数量

12     privat

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值