springboot购物车的代码
时间: 2023-10-29 13:55:20 浏览: 160
下面是一个简单的Spring Boot购物车的代码示例:
首先创建一个名为CartItem的实体类,表示购物车中的每个项目:
```java
@Entity
@Table(name = "cart_items")
public class CartItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private Product product;
@Column(nullable = false)
private Integer quantity;
// getters and setters
}
```
然后创建一个名为Cart的实体类,表示购物车:
```java
@Entity
@Table(name = "carts")
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "cart", cascade = CascadeType.ALL, orphanRemoval = true)
private List<CartItem> cartItems = new ArrayList<>();
// getters and setters
public void addCartItem(CartItem cartItem) {
cartItems.add(cartItem);
cartItem.setCart(this);
}
public void removeCartItem(CartItem cartItem) {
cartItems.remove(cartItem);
cartItem.setCart(null);
}
public BigDecimal getTotal() {
return cartItems.stream()
.map(CartItem::getTotalPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
```
在这个实体类中,我们使用了JPA注解来表示实体的一些属性,以及它们与其他实体之间的关系。Cart类包含一个cartItems列表,该列表存储购物车中的所有CartItem对象。它还有一些便捷的方法来添加和删除购物车项,并计算购物车中所有项目的总价。
接下来,我们可以创建一个名为CartController的控制器类,处理来自客户端的请求:
```java
@RestController
@RequestMapping("/api/carts")
public class CartController {
@Autowired
private CartRepository cartRepository;
@Autowired
private ProductRepository productRepository;
@PostMapping("/{cartId}/items")
public Cart addItem(@PathVariable Long cartId, @RequestBody CartItemRequest cartItemRequest) {
Cart cart = cartRepository.findById(cartId).orElseThrow(() -> new ResourceNotFoundException("Cart not found"));
Product product = productRepository.findById(cartItemRequest.getProductId()).orElseThrow(() -> new ResourceNotFoundException("Product not found"));
CartItem cartItem = new CartItem(product, cartItemRequest.getQuantity());
cart.addCartItem(cartItem);
return cartRepository.save(cart);
}
@DeleteMapping("/{cartId}/items/{itemId}")
public Cart removeItem(@PathVariable Long cartId, @PathVariable Long itemId) {
Cart cart = cartRepository.findById(cartId).orElseThrow(() -> new ResourceNotFoundException("Cart not found"));
CartItem cartItem = cart.getCartItems().stream()
.filter(item -> item.getId().equals(itemId))
.findFirst()
.orElseThrow(() -> new ResourceNotFoundException("Cart item not found"));
cart.removeCartItem(cartItem);
return cartRepository.save(cart);
}
@GetMapping("/{cartId}")
public Cart getCart(@PathVariable Long cartId) {
return cartRepository.findById(cartId).orElseThrow(() -> new ResourceNotFoundException("Cart not found"));
}
}
```
在这个控制器中,我们使用@Autowired注解注入了CartRepository和ProductRepository,这些是JPA存储库,用于访问数据库。addItem()方法接受一个cartId和一个CartItemRequest对象,该对象包含要添加到购物车的产品ID和数量。该方法首先从数据库中获取Cart和Product对象,然后创建一个新的CartItem对象,并将其添加到Cart中。最后,保存Cart并返回它。
removeItem()方法接受一个cartId和一个itemId,该itemId是要从购物车中删除的CartItem的ID。该方法首先从数据库中获取Cart对象,然后找到CartItems列表中具有指定ID的CartItem对象,并将其从列表中删除。最后,保存Cart并返回它。
getCart()方法接受一个cartId,并返回该ID对应的Cart对象。
最后,我们需要创建一个名为CartItemRequest的请求类,用于从客户端接收添加购物车项的请求:
```java
public class CartItemRequest {
private Long productId;
private Integer quantity;
// getters and setters
}
```
在这个请求类中,我们只需要productId和quantity属性的getter和setter方法。
这就是一个简单的Spring Boot购物车的代码示例。当然,这只是一个基本的实现,你可以根据自己的需要进行修改和扩展。
阅读全文