基于SSH框架的电子产品在线销售平台 - 源码深度解析

JavaJavaScriptSSH框架HTMLCSSMySQLJSP+Servlet
2026-02-1057 浏览

文章摘要

本项目是一款基于SSH(Struts2 + Spring + Hibernate)整合框架构建的电子产品在线销售平台,旨在为电子设备零售商或品牌商提供一个功能完整、稳定可靠的B2C电子商务解决方案。其核心业务价值在于通过标准化的在线商城系统,有效解决传统线下销售模式中渠道单一、库存管理效率低下、客户...

基于SSH框架的电子产品在线销售平台 - 源码深度解析

在数字经济蓬勃发展的今天,传统电子产品零售商正面临渠道单一、库存管理效率低下和客户触达范围有限等多重挑战。为应对这些行业痛点,基于SSH(Struts2 + Spring + Hibernate)整合框架开发的电子产品在线销售平台应运而生。该平台采用成熟的Java EE技术体系,为企业级B2C电商场景提供了功能完备、稳定可靠的解决方案。

系统架构与技术栈

本平台采用经典的三层架构设计,通过成熟的Java EE技术栈实现高内聚、低耦合的系统结构。这种分层架构不仅提升了代码的可维护性,还为系统的横向扩展奠定了坚实基础。

架构分层详解

表现层:基于Struts2框架构建,负责处理用户请求和页面跳转。通过拦截器机制实现了统一的权限验证和数据校验,确保系统安全性。Struts2的类型转换和验证框架为表单数据处理提供了强大支持。

业务逻辑层:由Spring框架的IoC容器统一管理,通过依赖注入(DI)方式解耦各个Service组件。这种设计使得商品查询服务、订单生成服务等核心业务模块能够独立开发和测试,提高了代码的可测试性。

数据持久层:依托Hibernate实现对象关系映射(ORM),通过HQL语言简化复杂查询操作。二级缓存机制的应用显著提升了数据访问性能,特别是在商品列表查询等高并发场景下表现优异。

技术栈配置

<!-- Struts2核心依赖 -->
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.30</version>
</dependency>

<!-- Spring框架全家桶 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.18</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.18</version>
</dependency>

<!-- Hibernate ORM框架 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.6.10.Final</version>
</dependency>

数据库设计亮点

订单表设计优化

订单表(indent)的设计体现了电商系统对数据完整性和查询性能的深度考量:

CREATE TABLE `indent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `total` float DEFAULT NULL COMMENT '总价',
  `amount` int(11) DEFAULT NULL COMMENT '商品总数',
  `status` tinyint(4) DEFAULT 1 COMMENT '订单状态(1未付款/2已付款/3已发货/4已完成)',
  `paytype` tinyint(4) DEFAULT 0 COMMENT '支付方式 (1微信/2支付宝/3货到付款)',
  `systime` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '下单时间',
  `user_id` int(11) DEFAULT NULL COMMENT '下单用户',
  `name` varchar(11) DEFAULT NULL COMMENT '收货人姓名',
  `idcardno` varchar(20) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表'

设计亮点分析

  • 状态字段优化:使用tinyint类型存储订单状态和支付方式,相比varchar类型可节省约75%的存储空间,同时提高查询效率
  • 时间戳管理systime字段采用timestamp类型并设置自动更新机制,确保订单状态变更时间准确记录,支持精确的业务审计
  • 索引策略:主键id自增设计配合InnoDB引擎的聚簇索引,保证订单数据的物理存储顺序与逻辑顺序一致,范围查询性能提升显著
  • 数据完整性:通过外键约束确保user_id的引用完整性,维护业务数据的一致性

商品表关系设计

商品相关的表结构设计展现了良好的范式规范和扩展性:

CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '名称',
  `cover` varchar(255) DEFAULT NULL COMMENT '封面',
  `price` float DEFAULT NULL COMMENT '价格',
  `intro` varchar(255) DEFAULT NULL COMMENT '介绍',
  `stock` int(11) DEFAULT NULL COMMENT '库存',
  `category_id` int(11) DEFAULT NULL COMMENT '分类',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'

CREATE TABLE `product_show` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) DEFAULT NULL COMMENT '商品ID',
  `showtext` varchar(255) DEFAULT NULL COMMENT '展示图片',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品展示表'

架构优势

  • 解耦设计:商品基本信息与展示内容分离,符合单一职责原则
  • 扩展性:支持一个商品对应多个展示图片的需求,轻松实现商品详情页的轮播图功能
  • 范式合规:符合第三范式要求,减少数据冗余,提高数据一致性
  • 查询优化:通过适当的索引策略,商品列表查询性能得到有效保障

商品管理界面

核心功能实现

用户购物车管理

购物车功能通过shopcart表实现用户商品的临时存储,采用Hibernate实体关系映射实现对象化操作:

// 购物车实体类 - 使用JPA注解配置ORM映射
@Entity
@Table(name="shopcart")
public class ShopCart {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    private int amount;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="product_id")
    private Product product;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="user_id")
    private User user;
    
    // getter和setter方法
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public int getAmount() { return amount; }
    public void setAmount(int amount) { this.amount = amount; }
    public Product getProduct() { return product; }
    public void setProduct(Product product) { this.product = product; }
    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
}

// 购物车业务服务层实现
@Service
@Transactional
public class ShopCartService {
    
    @Autowired
    private ShopCartDAO shopCartDAO;
    
    /**
     * 添加商品到购物车
     * @param product 商品实体
     * @param user 用户实体
     * @param amount 购买数量
     */
    public void addToCart(Product product, User user, int amount) {
        // 检查购物车中是否已存在该商品
        ShopCart existingItem = shopCartDAO.findByUserAndProduct(user, product);
        
        if (existingItem != null) {
            // 存在则更新数量
            existingItem.setAmount(existingItem.getAmount() + amount);
            shopCartDAO.update(existingItem);
        } else {
            // 不存在则创建新记录
            ShopCart newItem = new ShopCart();
            newItem.setProduct(product);
            newItem.setUser(user);
            newItem.setAmount(amount);
            shopCartDAO.save(newItem);
        }
    }
    
    /**
     * 获取用户购物车中的所有商品
     * @param user 用户实体
     * @return 购物车商品列表
     */
    public List<ShopCart> getCartItems(User user) {
        return shopCartDAO.findByUser(user);
    }
    
    /**
     * 清空用户购物车
     * @param user 用户实体
     */
    public void clearCart(User user) {
        shopCartDAO.deleteByUser(user);
    }
}

技术特色

  • 懒加载优化:使用FetchType.LAZY避免不必要的关联查询,提升性能
  • 事务管理@Transactional注解确保数据库操作的原子性
  • 业务逻辑封装:将复杂的购物车操作封装在Service层,提高代码复用性

加入购物车界面

订单处理流程

订单生成和处理是电商平台的核心业务,以下代码展示了Struts2 Action与Spring Service的无缝整合:

// 订单Action控制器 - 集成Struts2和Spring
@Controller
@Scope("prototype")
public class IndentAction extends ActionSupport {
    
    private Indent indent;
    private List<ShopCart> cartItems;
    private String message;
    
    @Autowired
    private IndentService indentService;
    
    @Autowired
    private ShopCartService shopCartService;
    
    /**
     * 生成订单方法
     * @return 结果视图
     */
    public String createIndent() {
        try {
            // 获取当前用户信息
            User user = (User) ActionContext.getContext()
                          .getSession().get("currentUser");
            
            if (user == null) {
                this.message = "用户未登录";
                return LOGIN;
            }
            
            // 获取购物车商品
            this.cartItems = shopCartService.getCartItems(user);
            
            if (cartItems == null || cartItems.isEmpty()) {
                this.message = "购物车为空";
                return ERROR;
            }
            
            // 计算订单总金额和商品总数
            float total = 0;
            int amount = 0;
            for (ShopCart cartItem : cartItems) {
                total += cartItem.getProduct().getPrice() * cartItem.getAmount();
                amount += cartItem.getAmount();
            }
            
            // 设置订单基本信息
            this.indent = new Indent();
            this.indent.setUser(user);
            this.indent.setTotal(total);
            this.indent.setAmount(amount);
            this.indent.setStatus(1); // 未付款状态
            this.indent.setSystime(new Timestamp(System.currentTimeMillis()));
            
            // 调用服务层创建订单
            indentService.createIndent(indent, cartItems);
            
            // 清空购物车
            shopCartService.clearCart(user);
            
            this.message = "订单创建成功";
            return SUCCESS;
            
        } catch (Exception e) {
            this.message = "订单创建失败:" + e.getMessage();
            return ERROR;
        }
    }
    
    // getter和setter方法
    public Indent getIndent() { return indent; }
    public void setIndent(Indent indent) { this.indent = indent; }
    public List<ShopCart> getCartItems() { return cartItems; }
    public void setCartItems(List<ShopCart> cartItems) { this.cartItems = cartItems; }
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
}

架构优势

  • MVC清晰分离:Action负责请求处理,Service负责业务逻辑,DAO负责数据访问
  • 异常处理:完整的异常捕获和处理机制,保证系统稳定性
  • 事务一致性:订单创建和购物车清空操作在同一个事务中执行
  • 会话管理:通过Session管理用户状态,确保数据安全性

性能优化实践

数据库层面优化

  1. 索引策略:为经常查询的字段建立复合索引,如(user_id, status)用于用户订单查询
  2. 查询优化:使用Hibernate的@BatchSize注解优化N+1查询问题
  3. 缓存应用:配置Hibernate二级缓存,减少数据库访问压力

应用层优化

  1. 连接池配置:使用Druid连接池管理数据库连接,提高资源利用率
  2. 懒加载策略:合理使用延迟加载,避免一次性加载过多关联数据
  3. 静态资源优化:通过CDN加速商品图片等静态资源的访问

总结

该SSH框架电子产品销售平台通过经典的三层架构和成熟的Java EE技术栈,实现了高可用、易扩展的电商解决方案。从数据库设计到业务逻辑实现,处处体现了软件工程的最佳实践。特别是订单处理和购物车管理模块的设计,为同类电商平台的开发提供了有价值的参考。

平台在可维护性、扩展性和性能方面都达到了企业级应用的标准,为传统电子产品零售商向数字化转型提供了强有力的技术支撑。

本文关键词
SSH框架电子产品在线销售平台源码解析数据库设计

上下篇

上一篇
没有更多文章
下一篇
没有更多文章