基于SSH框架的在线生鲜销售系统 - 源码深度解析

JavaScriptSSH框架HTMLCSSJSP+Servlet
2026-02-109 浏览

文章摘要

本项目是一款基于SSH(Struts2 + Spring + Hibernate)整合框架开发的在线生鲜销售系统,旨在为消费者提供一个便捷、可靠的线上生鲜商品购买平台,同时帮助商家高效管理商品与订单。其核心业务价值在于解决了传统生鲜采购中信息不透明、选购不便、库存管理效率低下等痛点,通过线上化方式缩...

在当今数字化消费趋势下,传统生鲜行业面临着信息不对称、供应链冗长、库存管理复杂等多重挑战。针对这些痛点,我们设计并实现了一套企业级生鲜电商平台,采用成熟的SSH(Struts2 + Spring + Hibernate)整合框架技术栈,构建了一个功能完整、性能稳定的在线交易系统。

系统采用经典的三层架构设计。表现层基于Struts2框架,通过Action类接收前端请求并调用业务逻辑,结合JSP页面和Struts标签库实现数据渲染。业务逻辑层由Spring框架托管,利用IoC容器统一管理Service组件,并通过AOP实现事务管理。数据持久层基于Hibernate实现ORM映射,通过SessionFactory和事务管理简化数据库操作。

数据库设计亮点分析

商品表(t_goods)的设计体现了良好的业务建模能力:

CREATE TABLE `t_goods` (
  `goods_id` int(11) NOT NULL COMMENT '商品ID',
  `goods_catelog_id` int(11) DEFAULT NULL COMMENT '商品分类ID',
  `goods_name` varchar(66) DEFAULT NULL COMMENT '商品名称',
  `goods_miaoshu` varchar(3000) DEFAULT NULL COMMENT '商品描述',
  `goods_pic` varchar(50) DEFAULT NULL COMMENT '商品图片',
  `goods_shichangjia` int(11) DEFAULT NULL COMMENT '商品市场价',
  `goods_tejia` int(11) DEFAULT NULL COMMENT '商品特价',
  `goods_isnottejia` varchar(50) DEFAULT NULL COMMENT '是否特价',
  `goods_Del` varchar(50) DEFAULT NULL COMMENT '商品删除状态',
  PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'

该表设计中,goods_miaoshu字段使用varchar(3000)类型,充分考虑了生鲜商品需要详细描述产地、保质期、存储条件等信息的业务需求。价格字段采用int类型存储分单位,避免浮点数精度问题。goods_isnottejiagoods_Del使用状态标识字段,支持灵活的营销策略和软删除功能。

订单表(t_order)与订单项表(t_orderitem)的关联设计展现了良好的规范化水平:

CREATE TABLE `t_order` (
  `id` int(11) NOT NULL COMMENT '订单ID',
  `bianhao` varchar(88) DEFAULT NULL COMMENT '订单编号',
  `xiadanshi` varchar(50) DEFAULT NULL COMMENT '下单时间',
  `userName` varchar(255) DEFAULT NULL COMMENT '用户名',
  `userRealname` varchar(255) DEFAULT NULL COMMENT '用户真实姓名',
  `userTel` varchar(255) DEFAULT NULL COMMENT '用户电话',
  `songhuodizhi` varchar(50) DEFAULT NULL COMMENT '送货地址',
  `fukuanfangshi` varchar(50) DEFAULT NULL COMMENT '付款方式',
  `jine` int(11) DEFAULT NULL COMMENT '金额',
  `zhuangtai` varchar(50) DEFAULT NULL COMMENT '订单状态',
  `userId` int(11) DEFAULT NULL COMMENT '用户ID',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表'

CREATE TABLE `t_orderitem` (
  `orderItem_id` int(11) NOT NULL COMMENT '订单项ID',
  `order_id` int(11) DEFAULT NULL COMMENT '订单ID',
  `goods_id` int(11) DEFAULT NULL COMMENT '商品ID',
  `goods_quantity` int(11) DEFAULT NULL COMMENT '商品数量',
  PRIMARY KEY (`orderItem_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单项表'

这种设计遵循了数据库第三范式,订单主表存储订单基本信息,订单项表记录具体商品明细,支持一个订单包含多个商品的需求。bianhao字段采用varchar(88)为订单编号生成规则预留充足空间,zhuangtai字段支持订单状态跟踪。

核心功能实现

商品管理模块采用Hibernate实体映射技术,实现商品信息的CRUD操作:

@Entity
@Table(name = "t_goods")
public class Goods {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer goods_id;
    
    private Integer goods_catelog_id;
    private String goods_name;
    private String goods_miaoshu;
    private String goods_pic;
    private Integer goods_shichangjia;
    private Integer goods_tejia;
    private String goods_isnottejia;
    private String goods_Del;
    
    // Getter和Setter方法
    public Integer getGoods_id() { return goods_id; }
    public void setGoods_id(Integer goods_id) { this.goods_id = goods_id; }
    
    public String getGoods_name() { return goods_name; }
    public void setGoods_name(String goods_name) { this.goods_name = goods_name; }
    
    // 其他getter/setter方法...
}

商品信息管理

购物车功能通过Spring Service层实现业务逻辑:

@Service
@Transactional
public class CartService {
    
    @Autowired
    private GoodsDAO goodsDAO;
    
    public void addToCart(Integer goodsId, Integer quantity, Map<Integer, CartItem> cart) {
        Goods goods = goodsDAO.findById(goodsId);
        if (cart.containsKey(goodsId)) {
            CartItem item = cart.get(goodsId);
            item.setQuantity(item.getQuantity() + quantity);
        } else {
            CartItem newItem = new CartItem(goods, quantity);
            cart.put(goodsId, newItem);
        }
    }
    
    public BigDecimal calculateTotal(Map<Integer, CartItem> cart) {
        return cart.values().stream()
                .map(item -> item.getGoods().getGoods_tejia().multiply(new BigDecimal(item.getQuantity())))
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
}

加入购物车

订单处理模块使用Struts2 Action处理用户请求:

public class OrderAction extends ActionSupport {
    private Order order;
    private List<CartItem> cartItems;
    
    @Autowired
    private OrderService orderService;
    
    public String createOrder() {
        try {
            // 验证购物车数据
            if (cartItems == null || cartItems.isEmpty()) {
                addActionError("购物车为空");
                return ERROR;
            }
            
            // 生成订单编号
            order.setBianhao(generateOrderNumber());
            order.setXiadanshi(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            
            // 保存订单
            orderService.createOrder(order, cartItems);
            
            return SUCCESS;
        } catch (Exception e) {
            addActionError("订单创建失败: " + e.getMessage());
            return ERROR;
        }
    }
    
    private String generateOrderNumber() {
        return "ORD" + System.currentTimeMillis() + (int)(Math.random() * 1000);
    }
}

提交订单信息

用户认证与权限控制通过拦截器实现:

public class AuthInterceptor extends AbstractInterceptor {
    
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        Map<String, Object> session = invocation.getInvocationContext().getSession();
        User user = (User) session.get("currentUser");
        
        if (user == null) {
            return "login"; // 跳转到登录页面
        }
        
        // 检查权限
        String actionName = invocation.getProxy().getActionName();
        if (!hasPermission(user, actionName)) {
            return "noPermission";
        }
        
        return invocation.invoke();
    }
    
    private boolean hasPermission(User user, String actionName) {
        // 权限验证逻辑
        return true;
    }
}

用户登录

实体模型设计

系统采用面向对象的设计思想,通过Hibernate注解实现对象关系映射:

@Entity
@Table(name = "t_order")
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    
    private String bianhao;
    private String xiadanshi;
    private String userName;
    private String userRealname;
    private String userTel;
    private String songhuodizhi;
    private String fukuanfangshi;
    private Integer jine;
    private String zhuangtai;
    private Integer userId;
    private String email;
    
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private Set<OrderItem> orderItems = new HashSet<>();
    
    // 关联方法
    public void addOrderItem(OrderItem item) {
        orderItems.add(item);
        item.setOrder(this);
    }
}
@Entity
@Table(name = "t_orderitem")
public class OrderItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer orderItem_id;
    
    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;
    
    @ManyToOne
    @JoinColumn(name = "goods_id")
    private Goods goods;
    
    private Integer goods_quantity;
    
    // 业务逻辑方法
    public BigDecimal getSubtotal() {
        return goods.getGoods_tejia().multiply(new BigDecimal(goods_quantity));
    }
}

功能展望与优化

基于当前系统架构,未来可从以下几个方向进行优化升级:

1. 引入Redis缓存层

@Service
public class GoodsServiceWithCache {
    
    @Autowired
    private RedisTemplate<String, Goods> redisTemplate;
    
    @Cacheable(value = "goods", key = "#goodsId")
    public Goods findGoodsWithCache(Integer goodsId) {
        return goodsDAO.findById(goodsId);
    }
    
    @CacheEvict(value = "goods", key = "#goods.goods_id")
    public void updateGoods(Goods goods) {
        goodsDAO.update(goods);
    }
}

2. 微服务架构改造 将单体应用拆分为商品服务、订单服务、用户服务等独立微服务,通过Spring Cloud实现服务治理。商品服务独立负责商品管理功能:

# application.yml for product-service
server:
  port: 8081
spring:
  application:
    name: product-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

3. 消息队列集成 使用RabbitMQ处理高并发订单,实现异步处理和削峰填谷:

@Component
public class OrderMessageProducer {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void sendOrderMessage(Order order) {
        rabbitTemplate.convertAndSend("order.exchange", "order.create", order);
    }
}

@Component
public class OrderMessageConsumer {
    
    @RabbitListener(queues = "order.queue")
    public void processOrder(Order order) {
        // 异步处理订单逻辑
        orderService.processOrderAsync(order);
    }
}

4. 移动端适配与PWA技术 开发响应式前端,支持PWA(渐进式Web应用)特性,提升移动端用户体验:

// service-worker.js
self.addEventListener('fetch', (event) => {
    if (event.request.url.includes('/api/goods')) {
        event.respondWith(
            caches.match(event.request)
                .then(response => response || fetch(event.request))
        );
    }
});

5. 智能推荐系统 基于用户行为数据实现个性化商品推荐:

@Service
public class RecommendationService {
    
    public List<Goods> recommendGoods(Integer userId) {
        // 基于协同过滤算法实现推荐逻辑
        return collaborativeFiltering(userId);
    }
    
    private List<Goods> collaborativeFiltering(Integer userId) {
        // 实现推荐算法
        return goodsDAO.findSimilarGoodsByUserBehavior(userId);
    }
}

总结

该生鲜电商平台通过SSH框架的有机整合,构建了一个功能完善、架构清晰的企业级应用系统。数据库设计合理规范,核心业务模块实现严谨,为后续的功能扩展和性能优化奠定了坚实基础。未来通过引入缓存、微服务、消息队列等现代技术栈,可以进一步提升系统的 scalability 和用户体验,满足日益增长的业务需求。

本文关键词
SSH框架生鲜销售系统源码解析数据库设计在线交易系统

上下篇

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