基于SSH框架的在线生鲜销售系统 - 源码深度解析
在数字化消费浪潮的推动下,传统生鲜行业正面临信息不对称、供应链冗长、库存管理复杂等多重挑战。为应对这些痛点,我们基于成熟的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_isnottejia和goods_Del采用状态标识字段设计,支持灵活的营销策略和软删除功能,符合企业级应用的需求
订单模块的规范化设计
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方法...
}

技术细节:
- 使用JPA注解实现对象关系映射,减少SQL编写工作量
@GeneratedValue注解采用IDENTITY策略,兼容多种数据库的自增主键特性- 实体类设计与数据库表结构完全对应,便于Hibernate进行持久化操作
购物车功能实现
通过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);
}
}

设计特点:
- 使用
@Transactional注解确保购物车操作的事务性 - 采用Map数据结构存储购物车项,提高商品查找效率
- 利用Java 8 Stream API实现优雅的金额计算逻辑
- 服务层与持久层完全解耦,便于单元测试和功能扩展
订单处理模块
使用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()));
订单处理流程优化:
- 采用Struts2的验证机制确保数据完整性
- 订单编号生成策略支持高并发场景
- 异常处理机制完善,保证系统稳定性
- 与Spring框架无缝集成,实现依赖注入