在数字化浪潮席卷零售业的今天,传统服装门店面临着展示空间有限、库存同步困难、销售地域受限等多重挑战。一个稳定、高效且易于维护的在线销售平台,成为中小型服装零售商突破发展瓶颈的关键。本系统正是针对这一市场需求,采用经典的SSH技术栈,构建了一个集商品展示、在线交易、后台管理于一体的综合性服装电商解决方案。
系统采用典型的分层架构设计,确保了代码的高内聚、低耦合特性。表现层由Struts2框架负责,其强大的拦截器机制和OGNL表达式语言,为请求处理和数据流转提供了坚实基础。业务逻辑层依托Spring框架的IoC容器进行组件管理,通过依赖注入实现各Service组件间的解耦,并结合声明式事务管理保障核心业务的数据一致性。数据持久层则采用Hibernate实现对象关系映射,显著简化了数据库操作复杂度,其缓存机制和延迟加载特性进一步优化了系统性能。
数据库设计亮点
在数据库设计层面,系统采用了规范化的关系模型,围绕核心业务实体建立了清晰的数据关系。其中几个关键表的设计尤为值得深入探讨。
商品表(product)的设计体现了电商系统的核心要素:
CREATE TABLE `product` (
`pid` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`pname` varchar(255) DEFAULT NULL COMMENT '商品名称',
`market_price` double DEFAULT NULL COMMENT '市场价',
`shop_price` double DEFAULT NULL COMMENT '商城价',
`image` varchar(255) DEFAULT NULL COMMENT '商品图片',
`pdesc` varchar(255) DEFAULT NULL COMMENT '商品描述',
`is_hot` int(11) DEFAULT NULL COMMENT '是否热销',
`pdate` datetime DEFAULT NULL COMMENT '上架时间',
`csid` int(11) DEFAULT NULL COMMENT '二级分类ID',
PRIMARY KEY (`pid`),
KEY `FKED8DCCEFB9B74E02` (`csid`),
CONSTRAINT `FKED8DCCEFB9B74E02` FOREIGN KEY (`csid`)
REFERENCES `categorysecond` (`csid`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8;
该表设计巧妙之处在于:通过market_price和shop_price双价格字段支持营销策略展示;is_hot标志位便于实现热销商品推荐功能;pdate上架时间字段为新品展示提供了数据支持;外键csid关联二级分类表,实现了商品的多级分类管理。InnoDB存储引擎的选择保障了事务安全性,自增主键优化了插入性能。
订单项表(orderitem)的设计展现了复杂业务关系的处理能力:
CREATE TABLE `orderitem` (
`itemid` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单项ID',
`count` int(11) DEFAULT NULL COMMENT '商品数量',
`subtotal` double DEFAULT NULL COMMENT '小计金额',
`pid` int(11) DEFAULT NULL COMMENT '商品ID',
`oid` int(11) DEFAULT NULL COMMENT '订单ID',
`uid` int(11) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`itemid`),
KEY `FKE8B2AB6166C01961` (`oid`),
KEY `FKE8B2AB6171DB7AE4` (`pid`),
CONSTRAINT `FKE8B2AB6171DB7AE4` FOREIGN KEY (`pid`)
REFERENCES `product` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
该表作为订单与商品之间的关联表,通过count和subtotal字段准确记录每个商品的购买数量和金额小计。多外键设计(pid、oid)确保了数据的引用完整性,而独立的itemid主键为订单项管理提供了灵活性。这种设计支持一个订单包含多个商品项的典型电商场景。
核心功能实现
商品管理模块
商品管理作为系统的核心功能,提供了完整的CRUD操作。后台管理界面采用清晰的表格布局,支持按分类、关键词等多条件查询。

对应的Struts2 Action负责处理商品相关的业务请求:
public class ProductAction extends ActionSupport implements ModelDriven<Product> {
private Product product = new Product();
private Integer pid;
private ProductService productService;
// 商品列表查询
public String findAll() {
PageBean<Product> pageBean = productService.findByPage(page);
ValueStack.setValue("pageBean", pageBean);
return "findAll";
}
// 商品添加功能
public String save() {
product.setPdate(new Date());
productService.save(product);
return "saveSuccess";
}
// 商品编辑功能
public String edit() {
product = productService.findByPid(pid);
return "editSuccess";
}
// 商品更新功能
public String update() {
productService.update(product);
return "updateSuccess";
}
@Override
public Product getModel() {
return product;
}
// Getter和Setter方法
public void setProductService(ProductService productService) {
this.productService = productService;
}
}
Spring服务层通过注解方式管理事务和依赖注入:
@Service("productService")
@Transactional
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductDao productDao;
@Override
@Transactional(readOnly = true)
public PageBean<Product> findByPage(Integer page) {
PageBean<Product> pageBean = new PageBean<>();
pageBean.setPage(page);
int limit = 10;
pageBean.setLimit(limit);
int totalCount = productDao.findCount();
pageBean.setTotalCount(totalCount);
int totalPage = (int) Math.ceil(totalCount / (double) limit);
pageBean.setTotalPage(totalPage);
int begin = (page - 1) * limit;
List<Product> list = productDao.findByPage(begin, limit);
pageBean.setList(list);
return pageBean;
}
@Override
public void save(Product product) {
productDao.save(product);
}
}
Hibernate数据访问层实现对象持久化操作:
@Repository("productDao")
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {
@Autowired
public void setSessionFactory0(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
@Override
public int findCount() {
String hql = "select count(*) from Product";
List<Long> list = (List<Long>) this.getHibernateTemplate().find(hql);
if (list != null && list.size() > 0) {
return list.get(0).intValue();
}
return 0;
}
@Override
public List<Product> findByPage(int begin, int limit) {
String hql = "from Product order by pdate desc";
List<Product> list = this.getHibernateTemplate().execute(new HibernateCallback<List<Product>>() {
@Override
public List<Product> doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery(hql);
query.setFirstResult(begin);
query.setMaxResults(limit);
return query.list();
}
});
return list;
}
}
购物车与订单处理
购物车功能采用Session存储方式,为用户提供临时的商品存储空间。订单生成过程涉及复杂的业务逻辑和事务控制。

购物车核心业务逻辑实现:
public class Cart {
// 购物项集合:key:商品pid, value:购物项
private Map<Integer, CartItem> map = new HashMap<>();
private double total; // 购物总金额
// 添加购物车项
public void addCart(CartItem cartItem) {
Integer pid = cartItem.getProduct().getPid();
if (map.containsKey(pid)) {
CartItem existingItem = map.get(pid);
existingItem.setCount(existingItem.getCount() + cartItem.getCount());
} else {
map.put(pid, cartItem);
}
total += cartItem.getSubtotal();
}
// 移除购物车项
public void removeCart(Integer pid) {
CartItem cartItem = map.remove(pid);
total -= cartItem.getSubtotal();
}
// 清空购物车
public void clearCart() {
map.clear();
total = 0;
}
}
订单提交过程涉及多表操作,需要严格的事务管理:
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private ProductDao productDao;
@Override
public void save(Order order) {
// 1. 保存订单基本信息
order.setOrdertime(new Date());
order.setState(1); // 1:未付款 2:已付款 3:已发货 4:已完成
order.setTotal(order.getTotal());
orderDao.save(order);
// 2. 保存订单项并更新商品库存
for (OrderItem orderItem : order.getOrderItems()) {
orderItem.setOrder(order);
orderDao.saveItem(orderItem);
// 更新商品库存(实际项目中应有库存字段)
Product product = orderItem.getProduct();
// 这里简化处理,实际需要检查库存是否充足
productDao.update(product);
}
}
}
用户权限管理
系统采用基于角色的访问控制,区分前台用户和后台管理员的不同权限。

用户认证拦截器确保权限控制:
public class PrivilegeInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
AdminUser adminUser = (AdminUser) ServletActionContext.getRequest()
.getSession().getAttribute("existAdminUser");
if (adminUser == null) {
ActionSupport actionSupport = (ActionSupport) actionInvocation.getAction();
actionSupport.addActionError("您还没有登录!没有权限访问!");
return "loginFail";
}
return actionInvocation.invoke();
}
}
实体模型设计
系统采用面向对象的领域模型设计,通过Hibernate映射将Java实体类与数据库表结构对应。以商品实体为例:
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "pid")
private Integer pid;
@Column(name = "pname")
private String pname;
@Column(name = "market_price")
private Double marketPrice;
@Column(name = "shop_price")
private Double shopPrice;
@Column(name = "image")
private String image;
@Column(name = "pdesc")
private String pdesc;
@Column(name = "is_hot")
private Integer isHot;
@Column(name = "pdate")
@Temporal(TemporalType.TIMESTAMP)
private Date pdate;
// 多对一关联:商品属于某个二级分类
@ManyToOne
@JoinColumn(name = "csid")
private CategorySecond categorySecond;
// 一对多关联:商品对应多个订单项
@OneToMany(mappedBy = "product")
private Set<OrderItem> orderItems = new HashSet<>();
// 构造函数、getter和setter方法
public Product() {}
}
订单实体与订单项的一对多关系设计:
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "oid")
private Integer oid;
@Column(name = "total")
private Double total;
@Column(name = "ordertime")
@Temporal(TemporalType.TIMESTAMP)
private Date ordertime;
@Column(name = "state")
private Integer state;
@Column(name = "name")
private String name;
@Column(name = "addr")
private String addr;
@Column(name = "phone")
private String phone;
// 多对一关联:订单属于某个用户
@ManyToOne
@JoinColumn(name = "uid")
private User user;
// 一对多关联:订单包含多个订单项
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private Set<OrderItem> orderItems = new HashSet<>();
}
功能展望与优化
基于当前系统架构,未来可以从以下几个方向进行优化和功能扩展:
引入Redis缓存提升性能
- 实现思路:将热门商品信息、分类数据等频繁读取但更新不频繁的数据存入Redis,减少数据库查询压力。使用Spring Cache抽象层统一管理缓存策略。
@Service public class ProductService { @Cacheable(value = "products", key = "#page + '_' + #size") public Page<Product> getHotProducts(int page, int size) { // 数据库查询逻辑 } }增加消息队列处理高并发订单
- 实现思路:使用RabbitMQ或Kafka处理秒杀场景下的订单创建请求,通过异步处理和流量削峰保障系统稳定性。订单请求先进入队列,再由消费者顺序处理。
微服务架构改造
- 实现思路:将单体应用拆分为用户服务、商品服务、订单服务、支付服务等独立微服务。使用Spring Cloud体系实现服务注册发现、配置管理和链路追踪。
移动端适配与响应式设计
- 实现思路:采用Bootstrap等前端框架实现响应式布局,或开发独立的移动端APP。RESTful API设计为多端提供统一的数据接口。
智能推荐功能增强
- 实现思路:基于用户浏览历史和购买记录,使用协同过滤算法实现个性化商品推荐。集成机器学习框架提升推荐准确度。
多商户支持与SaaS化改造
- 实现思路:重构用户体系,支持多个服装品牌商家独立入驻,各自管理商品和订单。实现平台化的电商SaaS解决方案。
总结
该服装电商平台通过SSH框架的有机整合,构建了一个功能完善、性能稳定的在线销售系统。分层架构设计确保了系统的可维护性和扩展性,严谨的数据库设计为业务发展提供了坚实的数据基础。从商品管理到订单处理,从用户权限到前端展示,系统各个环节都体现了成熟的技术方案和良好的工程实践。
随着电商行业的不断发展,系统在缓存优化、并发处理、架构演进等方面仍有提升空间。通过引入现代技术栈和架构理念,可以进一步提升系统的性能表现和业务承载能力,为服装零售商提供更加优质的数字化解决方案。该项目的技术实现为同类电商系统的开发提供了有价值的参考范例。