java实现购物车的原理及步骤_购物车的原理及实现

本文详细介绍了使用Java实现购物车功能的原理和步骤,涉及用户未登录时购物车数据存储在Cookie中,登录后将数据保存到Redis。文章通过JavaBean设计展示了如何处理购物车和购物项,包括添加购物项、计算小计、总价和运费等。此外,还讨论了如何将对象转换为JSON字符串以在Cookie和Redis之间进行交互。
摘要由CSDN通过智能技术生成

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

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

整体的思路图解:

0c54dfe5e37a891ce0ba4770e987be0c.png

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

下面是购物项: buyerItem.java

48304ba5e6f9fe08f3fa1abda7d326ab.png

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 private Integer amount = 1;

13

14 public Sku getSku() {

15 return sku;

16 }

17

18 public void setSku(Sku sku) {

19 this.sku = sku;

20 }

21

22 public Boolean getIsHave() {

23 return isHave;

24 }

25

26 public void setIsHave(Boolean isHave) {

27 this.isHave = isHave;

28 }

29

30 public Integer getAmount() {

31 return amount;

32 }

33

34 public void setAmount(Integer amount) {

35 this.amount = amount;

36 }

37

38 @Override

39 public int hashCode() {

40 final int prime = 31;

41 int result = 1;

42 result = prime * result + ((sku == null) ? 0 : sku.hashCode());

43 return result;

44 }

45

46 @Override

47 public boolean equals(Object obj) {

48 if (this == obj) //比较地址

49 return true;

50 if (obj == null)

51 return false;

52 if (getClass() != obj.getClass())

53 return false;

54 BuyerItem other = (BuyerItem) obj;

55 if (sku == null) {

56 if (other.sku != null)

57 return false;

58 } else if (!sku.getId().equals(other.sku.getId()))

59 return false;

60 return true;

61 }

62 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

1,将商品加入购物车中

7b94b8973c1f5edbfc83418c4e6ac063.png

1 //加入购物车

2 function addCart(){

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值