在当今数字化零售时代,中小型企业和个人创业者亟需一套稳定可靠、功能完备的线上销售解决方案。本系统采用经典的SSH(Struts2 + Spring + Hibernate)技术栈构建,旨在为这类用户群体提供从商品展示、交易处理到后台管理的全流程电商服务。系统通过分层架构设计和框架整合,有效解决了传统零售业务中存在的流程冗余、数据不一致和运维成本高等痛点。
系统采用典型的三层架构模式,各层职责明确。表现层由Struts2框架主导,负责接收HTTP请求、调用业务逻辑及返回视图响应。其核心组件Action类作为前端请求的入口点,通过配置struts.xml文件映射URL与业务方法,并结合JSP页面与自定义标签库实现动态内容渲染。业务层基于Spring框架的IoC容器实现组件管理,通过依赖注入(DI)将商品服务、订单服务等业务对象解耦,同时利用Spring的声明式事务管理(@Transactional)确保订单创建、库存更新等关键操作的原子性。数据持久层依托Hibernate实现对象关系映射(ORM),通过配置实体类与数据库表的映射关系,将Java对象操作转化为SQL语句执行,并支持HQL(Hibernate Query Language)进行复杂查询,显著提升了数据访问的抽象度和可维护性。
系统支持多角色协同操作。普通用户可通过前端界面完成商品浏览、购物车管理、订单提交等操作;管理员则拥有商品分类管理、订单处理、用户信息维护等后台管理权限。系统运行时依赖MySQL数据库进行数据存储,并部署于Tomcat等Servlet容器中。
数据库架构设计与核心表解析
系统共设计6张核心数据表,涵盖用户、商品、订单等关键业务实体。以下重点分析product(商品表)和orders(订单表)的设计亮点。
商品表(product)结构如下:
CREATE TABLE `product` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(255) DEFAULT NULL,
`market_price` double DEFAULT NULL,
`shop_price` double DEFAULT NULL,
`pimage` varchar(255) DEFAULT NULL,
`pdate` date DEFAULT NULL,
`is_hot` int(11) DEFAULT NULL,
`pdesc` varchar(255) DEFAULT NULL,
`pflag` int(11) DEFAULT NULL,
`cid` int(11) DEFAULT NULL,
PRIMARY KEY (`pid`),
KEY `FK_product_category` (`cid`),
CONSTRAINT `FK_product_category` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
该表设计体现了电商场景下商品管理的典型需求:
- 价格策略字段:
market_price(市场价)与shop_price(店铺价)分设,便于开展促销活动时计算折扣幅度。 - 热销标识:
is_hot字段通过布尔值标记热门商品,支持前端按热度排序展示。 - 外键关联:通过
cid字段关联商品分类表(category),实现商品的多级分类管理。 - 状态控制:
pflag字段用于软删除标记,避免物理删除导致的数据关联断裂。
订单表(orders)设计如下:
CREATE TABLE `orders` (
`oid` int(11) NOT NULL AUTO_INCREMENT,
`total` double DEFAULT NULL,
`ordertime` datetime DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
`addr` varchar(50) DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
PRIMARY KEY (`oid`),
KEY `FK_orders_user` (`uid`),
CONSTRAINT `FK_orders_user` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
订单表的核心设计考量包括:
- 状态机设计:
state字段通过整型值表示订单生命周期(如0-待付款、1-已付款、2-已发货),为后续流程扩展预留空间。 - 冗余字段优化:
name、phone、addr字段直接存储下单时的快照信息,避免用户修改个人信息后历史订单数据不一致。 - 时间戳记录:
ordertime字段精确到datetime级别,支持按时间范围统计销售额等业务需求。
核心功能实现与代码解析
1. 商品浏览与分类检索
系统首页通过分层加载策略展示商品信息。前端通过AJAX请求分类数据,后端由Struts2的CategoryAction处理查询逻辑,并通过Hibernate的延迟加载机制优化性能。
分类查询Action核心代码:
public class CategoryAction extends ActionSupport implements ModelDriven<Category> {
private CategoryService categoryService;
private List<Category> cList;
public String findAll() {
cList = categoryService.findAll();
return "findAll";
}
// Getter/Setter省略
}
Service层实现数据检索:
@Service
@Transactional
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryDao categoryDao;
@Override
public List<Category> findAll() {
return categoryDao.findAll();
}
}
DAO层使用HQL进行查询:
@Repository
public class CategoryDaoImpl implements CategoryDao {
@Autowired
private HibernateTemplate hibernateTemplate;
@Override
public List<Category> findAll() {
return (List<Category>) hibernateTemplate.find("from Category");
}
}

2. 购物车管理与状态保持
购物车功能采用Session存储方案,确保用户操作期间的临时数据一致性。CartAction中通过维护一个Map结构存储商品ID与数量的映射关系。
购物车添加商品逻辑:
public class CartAction extends ActionSupport {
private Map<Integer, CartItem> cart;
private Integer pid;
private Integer count;
public String addToCart() {
Product product = productService.findByPid(pid);
CartItem item = new CartItem();
item.setProduct(product);
item.setCount(count);
cart.put(pid, item);
return "addToCart";
}
}
购物车项实体设计:
public class CartItem {
private Product product;
private Integer count;
private Double subtotal;
public Double getSubtotal() {
return product.getShop_price() * count;
}
// Getter/Setter省略
}

3. 订单创建与事务控制
订单提交涉及多个数据表的原子性操作,包括订单主表插入、订单项批量插入和库存更新等。系统通过Spring的声明式事务确保操作一致性。
订单服务层事务控制:
@Service
@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Override
public void save(Orders order, List<OrderItem> items) {
orderDao.save(order);
for (OrderItem item : items) {
orderDao.saveItem(item);
productDao.updateStock(item.getProduct().getPid(), item.getCount());
}
}
}
订单项持久化操作:
@Repository
public class OrderDaoImpl implements OrderDao {
@Autowired
private HibernateTemplate hibernateTemplate;
@Override
public void save(Orders order) {
hibernateTemplate.save(order);
}
@Override
public void saveItem(OrderItem item) {
hibernateTemplate.save(item);
}
}

4. 后台商品管理
管理员可通过后台系统对商品进行增删改查操作,商品上传功能通过Commons FileUpload组件实现图片文件存储。
商品上传Action处理:
public class AdminProductAction extends ActionSupport {
private File upload;
private String uploadFileName;
public String addProduct() {
String path = ServletActionContext.getServletContext().getRealPath("/products");
File file = new File(path);
if (!file.exists()) file.mkdirs();
File destFile = new File(file, uploadFileName);
FileUtils.copyFile(upload, destFile);
product.setPimage("products/" + uploadFileName);
productService.save(product);
return "addSuccess";
}
}

实体模型与关系映射
系统通过Hibernate注解实现对象关系映射,以下为订单实体(Orders)的映射配置:
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer oid;
private Double total;
private Date ordertime;
private Integer state;
@ManyToOne
@JoinColumn(name = "uid")
private User user;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private Set<OrderItem> orderItems = new HashSet<>();
// Getter/Setter省略
}
订单项(OrderItem)实体配置体现多对一关联:
@Entity
@Table(name = "orderitem")
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer itemid;
private Integer count;
private Double subtotal;
@ManyToOne
@JoinColumn(name = "oid")
private Orders order;
@ManyToOne
@JoinColumn(name = "pid")
private Product product;
}
系统优化与功能扩展方向
缓存机制集成:引入Redis作为二级缓存,将热门商品数据、分类信息等缓存在内存中,降低数据库访问压力。可通过Spring Cache抽象层实现注解式缓存配置。
搜索引擎优化:集成Elasticsearch实现商品全文检索功能,支持按商品名称、描述等多字段进行模糊匹配,提升搜索准确性和响应速度。
支付网关扩展:当前系统仅模拟支付流程,可集成支付宝、微信支付等第三方支付接口,通过支付回调接口更新订单状态,实现真实交易闭环。
微服务架构改造:将单体应用拆分为商品服务、订单服务、用户服务等独立微服务,通过Spring Cloud组件实现服务注册发现、配置管理和链路追踪。
移动端适配:开发RESTful API接口,支持iOS/Android客户端访问,采用JWT令牌进行身份认证,实现多终端数据同步。
该系统通过严谨的架构设计和规范的编码实践,为中小型电商业务提供了可靠的技术基础。其模块化设计使得后续的功能扩展和技术升级具备良好的可行性,能够适应不断变化的业务需求。