实现SSM简易商城项目的购物车实现
在这篇博客中,我们将使用SSM框架来实现一个简易的购物车功能。我们将使用Spring框架来管理Bean,使用SpringMVC框架来处理HTTP请求,使用MyBatis框架来操作数据库。
实现SSM简易商城项目的购物车功能的思路如下:
-
创建数据库表:创建一个商品表和一个购物车表,商品表用于存储商品的信息,购物车表用于存储用户添加到购物车中的商品信息。
-
创建实体类:创建商品实体类和购物车实体类,用于映射数据库表的字段。
-
创建DAO接口和Mapper文件:创建商品DAO接口和购物车DAO接口,并创建对应的Mapper文件,用于定义数据库操作的方法。
-
创建Service接口和实现类:创建商品Service接口和购物车Service接口,并创建对应的实现类,用于处理业务逻辑。
-
创建Controller:创建商品Controller和购物车Controller,用于处理用户的请求和返回相应的视图。
-
创建JSP视图:创建商品查询页面和购物车页面的JSP视图,用于展示商品信息和购物车内容。
-
实现购物车功能:在购物车Controller中,实现添加商品到购物车和从购物车中移除商品的功能。通过购物车Service和购物车DAO,将商品信息存储到购物车表中,并从购物车表中获取购物车内容。
-
展示购物车内容:在购物车页面的JSP视图中,通过购物车Controller返回的购物车内容,展示购物车中的商品信息,并提供移除商品的功能。
以上是实现SSM简易商城项目的购物车功能的基本思路。根据这个思路,您可以逐步实现和扩展购物车功能,以满足项目需求。
步骤一:创建数据库表
首先,我们需要创建一个名为product
的数据库表,用于存储商品的信息。表结构如下:
CREATE TABLE product (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DOUBLE NOT NULL,
stock INT NOT NULL,
category VARCHAR(100) NOT NULL
);
步骤二:创建实体类
在src/main/java
目录下创建一个名为com.example.entity
的包,并在该包下创建一个名为Product.java
的文件,作为商品实体类。代码如下:
package com.example.entity;
public class Product {
private int id;
private String name;
private double price;
private int stock;
private String category;
// 省略getter和setter方法
}
步骤三:创建Mapper接口
在src/main/java
目录下创建一个名为com.example.mapper
的包,并在该包下创建一个名为ProductMapper.java
的文件,作为商品Mapper接口。代码如下:
package com.example.mapper;
import com.example.entity.Product;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ProductMapper {
List<Product> getProductsByCategory(@Param("category") String category);
Product getProductById(@Param("id") int id);
void updateProduct(Product product);
}
步骤四:创建Mapper映射文件
在src/main/resources
目录下创建一个名为mapper
的文件夹,并在该文件夹下创建一个名为ProductMapper.xml
的文件,作为商品Mapper映射文件。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.ProductMapper">
<select id="getProductsByCategory" resultType="com.example.entity.Product">
SELECT * FROM product WHERE category = #{category}
</select>
<select id="getProductById" resultType="com.example.entity.Product">
SELECT * FROM product WHERE id = #{id}
</select>
<update id="updateProduct">
UPDATE product SET stock = #{stock} WHERE id = #{id}
</update>
</mapper>
步骤五:创建Controller类
在src/main/java
目录下创建一个名为com.example.controller
的包,并在该包下创建一个名为ProductController.java
的文件,作为商品Controller类。代码如下:
package com.example.controller;
import com.example.entity.Product;
import com.example.mapper.ProductMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Controller
public class ProductController {
@Autowired
private ProductMapper productMapper;
@GetMapping("/products")
public String getProductsByCategory(@RequestParam("category") String category, Model model) {
List<Product> products = productMapper.getProductsByCategory(category);
model.addAttribute("products", products);
return "products";
}
@GetMapping("/add-to-cart")
public String addToCart(@RequestParam("productId") int productId, HttpServletRequest request) {
Product product = productMapper.getProductById(productId);
if (product != null) {
List<Product> cart = (List<Product>) request.getSession().getAttribute("cart");
if (cart == null) {
cart = new ArrayList<>();
request.getSession().setAttribute("cart", cart);
}
cart.add(product);
// 更新商品库存
product.setStock(product.getStock() - 1);
productMapper.updateProduct(product);
}
return "redirect:/products?category=" + product.getCategory();
}
@GetMapping("/cart")
public String viewCart(HttpServletRequest request, Model model) {
List<Product> cart = (List<Product>) request.getSession().getAttribute("cart");
model.addAttribute("cart", cart);
return "cart";
}
@GetMapping("/remove-from-cart")
public String removeFromCart(@RequestParam("productId") int productId, HttpServletRequest request) {
List<Product> cart = (List<Product>) request.getSession().getAttribute("cart");
if (cart != null) {
Product productToRemove = null;
for (Product product : cart) {
if (product.getId() == productId) {
productToRemove = product;
break;
}
}
if (productToRemove != null) {
cart.remove(productToRemove);
// 更新商品库存
Product product = productMapper.getProductById(productId);
product.setStock(product.getStock() + 1);
productMapper.updateProduct(product);
}
}
return "redirect:/cart";
}
}
步骤六:创建JSP视图
在src/main/webapp/WEB-INF
目录下创建一个名为views
的文件夹,并在该文件夹下创建一个名为products.jsp
的文件,作为商品列表的JSP视图。代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>商品列表</title>
</head>
<body>
<h1>商品列表</h1>
<table>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
<th>库存</th>
<th>分类</th>
<th>操作</th>
</tr>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>${product.stock}</td>
<td>${product.category}</td>
<td>
<a href="/add-to-cart?productId=${product.id}">加入购物车</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
在src/main/webapp/WEB-INF/views
目录下创建一个名为cart.jsp
的文件,作为购物车的JSP视图。代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>购物车</title>
</head>
<body>
<h1>购物车</h1>
<table>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
<th>操作</th>
</tr>
<c:forEach items="${cart}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>
<a href="/remove-from-cart?productId=${product.id}">移出购物车</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
步骤七:运行项目
现在,我们可以启动项目并访问商品查询页面了。在浏览器中输入http://localhost:8080/products?category=电子产品
,即可获取并展示符合条件的商品信息。点击"加入购物车"按钮,商品将被添加到购物车中。在购物车页面http://localhost:8080/cart
,您可以查看购物车中的商品,并可以点击"移出购物车"按钮将商品从购物车中移除。