基于SSH框架的宠物商城在线购物系统 - 源码深度解析

SSH框架JavaJavaScriptHTMLCSSMySQL
2026-03-204 浏览

文章摘要

本项目是一款基于经典SSH(Struts2 + Spring + Hibernate)框架技术栈构建的宠物主题在线购物系统,旨在为宠物爱好者提供一个品类齐全、操作便捷的一站式宠物用品采购平台。系统核心解决了传统线下宠物商店商品种类有限、信息不透明、购物受时间地点限制等痛点,通过线上商城的模式,将宠物...

在电子商务领域,宠物用品市场展现出持续的增长潜力。传统的线下宠物商店受限于物理空间和营业时间,难以满足消费者对商品多样性、信息透明度和便捷购物的需求。针对这一市场痛点,我们设计并实现了一套基于SSH(Struts2 + Spring + Hibernate)技术架构的在线宠物用品商城系统——“PetSphere”。

PetSphere系统采用经典的三层MVC架构,实现了业务逻辑、数据持久化和表现层的清晰分离。表现层使用Struts2框架处理用户请求和页面跳转,通过精心设计的Action类控制器协调用户交互流程。业务逻辑层由Spring框架的IOC容器统一管理,通过依赖注入实现各组件间的松耦合。数据持久层依托Hibernate实现对象关系映射,简化了数据库操作并确保数据一致性。

数据库架构设计深度解析

系统的数据模型设计充分考虑了电商业务的复杂性,共包含10个核心数据表。其中用户表(users)的设计体现了完善的安全机制和用户管理体系:

CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL UNIQUE,
  `password` varchar(255) NOT NULL,
  `email` varchar(100) NOT NULL UNIQUE,
  `phone` varchar(20) DEFAULT NULL,
  `real_name` varchar(50) DEFAULT NULL,
  `gender` enum('MALE','FEMALE') DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `avatar_url` varchar(255) DEFAULT NULL,
  `user_type` enum('CUSTOMER','ADMIN') DEFAULT 'CUSTOMER',
  `registration_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `last_login_time` datetime DEFAULT NULL,
  `account_status` enum('ACTIVE','INACTIVE','SUSPENDED') DEFAULT 'ACTIVE',
  PRIMARY KEY (`user_id`),
  KEY `idx_username` (`username`),
  KEY `idx_email` (`email`),
  KEY `idx_registration_time` (`registration_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

该表设计具有多个技术亮点:使用MD5加盐哈希存储密码,确保用户信息安全;通过枚举类型约束用户性别和账户状态,保证数据完整性;建立多字段索引优化查询性能;预留头像URL字段支持个性化功能扩展。

商品表(products)的设计则体现了电商系统的核心业务需求:

CREATE TABLE `products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(200) NOT NULL,
  `category_id` int(11) NOT NULL,
  `brand` varchar(100) DEFAULT NULL,
  `description` text,
  `specifications` json DEFAULT NULL,
  `price` decimal(10,2) NOT NULL,
  `original_price` decimal(10,2) DEFAULT NULL,
  `stock_quantity` int(11) NOT NULL DEFAULT 0,
  `sales_volume` int(11) DEFAULT 0,
  `main_image` varchar(255) NOT NULL,
  `image_gallery` json DEFAULT NULL,
  `is_featured` tinyint(1) DEFAULT 0,
  `is_available` tinyint(1) DEFAULT 1,
  `created_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`product_id`),
  FOREIGN KEY (`category_id`) REFERENCES `product_categories`(`category_id`),
  KEY `idx_category` (`category_id`),
  KEY `idx_price` (`price`),
  KEY `idx_sales` (`sales_volume`),
  KEY `idx_featured` (`is_featured`),
  FULLTEXT KEY `ft_name_desc` (`product_name`, `description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

此表设计采用JSON类型存储商品规格和图片画廊,适应不同品类产品的多样化属性需求。通过全文索引支持商品名称和描述的模糊搜索,多维度索引优化各类查询场景。价格字段使用DECIMAL类型确保计算精度,时间戳字段自动维护数据版本。

核心业务功能实现剖析

  1. 用户认证与权限管理

系统通过Struts2拦截器实现统一的权限验证机制。以下是用户登录Action的核心代码:

public class UserAction extends ActionSupport {
    private String username;
    private String password;
    private UserService userService;
    private Map<String, Object> session;
    
    public String login() {
        try {
            User user = userService.authenticate(username, password);
            if (user != null) {
                session.put("currentUser", user);
                if (user.getUserType() == UserType.ADMIN) {
                    return "admin_dashboard";
                }
                return "customer_home";
            } else {
                addActionError("用户名或密码错误");
                return INPUT;
            }
        } catch (Exception e) {
            addActionError("系统错误,请稍后重试");
            return ERROR;
        }
    }
    
    // Getter和Setter方法
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}

用户登录界面

Spring配置文件中通过依赖注入实现Service层的装配:

<bean id="userService" class="com.petsphere.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
    <property name="passwordEncoder" ref="bcryptPasswordEncoder"/>
</bean>

<bean id="userAction" class="com.petsphere.web.action.UserAction" scope="prototype">
    <property name="userService" ref="userService"/>
</bean>
  1. 商品管理与展示系统

商品管理模块采用Hibernate实现复杂的数据查询和分页功能。以下是商品查询服务的实现:

@Service
@Transactional
public class ProductServiceImpl implements ProductService {
    
    @Autowired
    private ProductDao productDao;
    
    @Override
    public Page<Product> searchProducts(String keyword, Integer categoryId, 
                                      Double minPrice, Double maxPrice, 
                                      int page, int size) {
        Criteria criteria = productDao.createCriteria();
        
        if (StringUtils.isNotBlank(keyword)) {
            Disjunction disjunction = Restrictions.disjunction();
            disjunction.add(Restrictions.ilike("productName", keyword, MatchMode.ANYWHERE));
            disjunction.add(Restrictions.ilike("description", keyword, MatchMode.ANYWHERE));
            criteria.add(disjunction);
        }
        
        if (categoryId != null) {
            criteria.add(Restrictions.eq("category.categoryId", categoryId));
        }
        
        if (minPrice != null) {
            criteria.add(Restrictions.ge("price", minPrice));
        }
        
        if (maxPrice != null) {
            criteria.add(Restrictions.le("price", maxPrice));
        }
        
        criteria.add(Restrictions.eq("available", true));
        criteria.addOrder(Order.desc("salesVolume"));
        
        // 分页处理
        criteria.setFirstResult((page - 1) * size);
        criteria.setMaxResults(size);
        
        List<Product> products = criteria.list();
        Long total = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
        
        return new Page<>(products, total, page, size);
    }
}

商品管理界面

  1. 购物车与订单处理流程

购物车功能采用Session存储临时数据,确保用户体验的连贯性。以下是购物车添加商品的实现:

public class CartAction extends ActionSupport {
    private Integer productId;
    private Integer quantity;
    private ProductService productService;
    private Map<String, Object> session;
    
    public String addToCart() {
        ShoppingCart cart = (ShoppingCart) session.get("shoppingCart");
        if (cart == null) {
            cart = new ShoppingCart();
            session.put("shoppingCart", cart);
        }
        
        Product product = productService.getProductById(productId);
        if (product != null && product.getStockQuantity() >= quantity) {
            cart.addItem(product, quantity);
            return SUCCESS;
        } else {
            addActionError("商品库存不足");
            return ERROR;
        }
    }
}

添加到购物车

订单处理采用Spring声明式事务管理,确保数据一致性:

@Service
@Transactional
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderDao orderDao;
    
    @Autowired
    private ProductDao productDao;
    
    @Override
    public Order createOrder(Order order, List<OrderItem> items) {
        // 验证库存
        for (OrderItem item : items) {
            Product product = productDao.get(item.getProduct().getProductId());
            if (product.getStockQuantity() < item.getQuantity()) {
                throw new InsufficientStockException("商品库存不足: " + product.getProductName());
            }
        }
        
        // 扣减库存
        for (OrderItem item : items) {
            productDao.decreaseStock(item.getProduct().getProductId(), item.getQuantity());
        }
        
        // 保存订单
        order.setOrderTime(new Date());
        order.setOrderStatus(OrderStatus.PENDING_PAYMENT);
        order.setTotalAmount(calculateTotalAmount(items));
        orderDao.save(order);
        
        return order;
    }
}

订单结算界面

  1. 后台管理系统

管理员功能模块提供完整的后台管理界面,支持商品、用户、订单的全面管理:

@Controller
@Scope("prototype")
public class AdminProductAction extends ActionSupport {
    
    private Product product;
    private File mainImage;
    private String mainImageContentType;
    private String mainImageFileName;
    
    public String saveProduct() {
        try {
            // 处理图片上传
            if (mainImage != null) {
                String imagePath = FileUploadUtil.uploadProductImage(mainImage, mainImageFileName);
                product.setMainImage(imagePath);
            }
            
            productService.saveProduct(product);
            addActionMessage("商品保存成功");
            return SUCCESS;
        } catch (Exception e) {
            addActionError("商品保存失败: " + e.getMessage());
            return ERROR;
        }
    }
}

订单管理界面

实体模型设计与业务逻辑

系统通过Hibernate实体映射实现对象关系管理。用户实体模型的设计体现了丰富的业务属性:

@Entity
@Table(name = "users")
public class User implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer userId;
    
    @Column(unique = true, nullable = false, length = 50)
    private String username;
    
    @Column(nullable = false, length = 255)
    private String password;
    
    @Column(unique = true, nullable = false, length = 100)
    private String email;
    
    @Enumerated(EnumType.STRING)
    private UserType userType;
    
    @Enumerated(EnumType.STRING)
    private AccountStatus accountStatus;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date registrationTime;
    
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private Set<Order> orders = new HashSet<>();
    
    // 其他属性和方法
}

系统优化与功能扩展展望

基于当前系统架构,未来可从以下几个方向进行深度优化和功能扩展:

  1. 性能优化与缓存策略:引入Redis分布式缓存,对热门商品数据、用户会话信息进行缓存处理。实现二级缓存机制,减少数据库访问压力。通过Ehcache整合Hibernate二级缓存,提升查询性能。

  2. 搜索引擎集成:整合Elasticsearch实现高级搜索功能,支持商品的多维度筛选、智能推荐和搜索词建议。通过IK分词器优化中文搜索体验,提升搜索准确度和响应速度。

  3. 微服务架构改造:将单体应用拆分为用户服务、商品服务、订单服务等独立微服务。采用Spring Cloud技术栈实现服务注册发现、配置中心和API网关,提升系统可扩展性和维护性。

  4. 移动端适配与PWA技术:开发响应式前端界面,适配移动设备。引入PWA技术实现离线访问、消息推送等功能,提升用户体验。采用Vue.js或React重构前端界面,实现前后端分离架构。

  5. 智能推荐系统:基于用户行为数据构建推荐算法,实现个性化商品推荐。采用协同过滤和内容推荐相结合的策略,提升转化率和用户粘性。通过机器学习模型持续优化推荐效果。

  6. 多商户支持与供应链管理:扩展系统支持多商户入驻,实现平台化运营。增加供应商管理、库存同步、结算对账等功能,构建完整的B2B2C电商生态。

PetSphere系统通过严谨的架构设计和扎实的技术实现,为宠物用品电商领域提供了稳定可靠的解决方案。系统具备良好的扩展性和维护性,为后续的功能迭代和技术升级奠定了坚实基础。随着技术的不断发展和业务需求的演进,系统将持续优化完善,为用户提供更加优质的购物体验。

本文关键词
SSH框架宠物商城在线购物系统源码解析数据库架构

上下篇

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