在当今数字化消费时代,专门针对婴幼儿产品的电子商务平台呈现出巨大的市场需求。这类平台需要满足家长对产品质量、安全性和购买便捷性的高标准要求。本文介绍的婴幼儿用品电商系统采用经典的SSH(Struts2 + Spring + Hibernate)集成框架构建,实现了从商品展示、购物车管理到订单处理的全流程在线销售功能。
系统架构与技术栈设计
该系统采用典型的三层架构模式,各层职责明确,耦合度低。表现层使用Struts2框架处理用户请求和页面跳转,通过配置struts.xml文件定义Action与JSP页面的映射关系。业务逻辑层由Spring框架托管,利用控制反转(IoC)容器管理各个Service组件的依赖关系,并通过面向切面编程(AOP)实现事务管理。数据持久层基于Hibernate实现对象关系映射(ORM),简化了数据库操作。
<!-- Spring配置文件示例 -->
<bean id="goodsService" class="com.babygoods.service.impl.GoodsServiceImpl">
<property name="goodsDao" ref="goodsDao"/>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
数据库设计亮点分析
商品表设计优化
t_goods表的设计体现了电商系统的核心需求。该表采用适当的字段类型和长度规划,mingcheng字段使用varchar(255)满足商品名称的存储需求,jieshao字段使用varchar(5000)为商品详细描述提供充足空间。特别值得注意的是shifoutejia字段的设计,采用字符串类型存储特价状态,便于扩展多种促销状态。
CREATE TABLE `t_goods` (
`id` int(11) NOT NULL COMMENT 'ID',
`leibieId` int(11) DEFAULT NULL COMMENT '类别ID',
`mingcheng` varchar(255) DEFAULT NULL COMMENT '名称',
`jieshao` varchar(5000) DEFAULT NULL COMMENT '介绍',
`fujian` varchar(255) DEFAULT NULL COMMENT '附件',
`jiage` int(11) DEFAULT NULL COMMENT '价格',
`tejia` int(11) DEFAULT NULL COMMENT '特价',
`shifoutejia` varchar(255) DEFAULT NULL COMMENT '是否特价',
`del` varchar(255) DEFAULT NULL COMMENT '是否删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'
订单与明细表关系设计
t_order和t_mingxi表的设计体现了良好的数据库规范化原则。订单主表存储订单的基本信息,如编号、下单时间、状态、总价等,而明细表则记录每个订单中的具体商品信息。这种设计支持一个订单包含多个商品的需求,符合电商业务的实际情况。
CREATE TABLE `t_order` (
`id` int(11) NOT NULL COMMENT 'ID',
`bianhao` varchar(255) DEFAULT NULL COMMENT '编号',
`xiadanshi` varchar(255) DEFAULT NULL COMMENT '下单时间',
`zt` varchar(255) DEFAULT NULL COMMENT '状态',
`songhuodizhi` varchar(255) DEFAULT NULL COMMENT '送货地址',
`fukuanfangshi` varchar(255) DEFAULT NULL COMMENT '付款方式',
`zongjia` int(11) DEFAULT NULL COMMENT '总价',
`huiyuanId` int(11) DEFAULT NULL COMMENT '会员ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单表'
CREATE TABLE `t_mingxi` (
`id` int(11) NOT NULL COMMENT 'ID',
`orderid` int(11) DEFAULT NULL COMMENT '订单ID',
`goodsId` int(11) DEFAULT NULL COMMENT '商品ID',
`goodsShuliang` int(11) DEFAULT NULL COMMENT '商品数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='明细表'
核心功能实现详解
用户登录与权限控制
系统采用Struts2拦截器实现统一的权限验证机制。用户登录后,系统根据用户角色(普通会员或管理员)分配不同的操作权限。登录功能通过Spring管理的UserService处理业务逻辑,Hibernate负责数据持久化。
// Struts2登录Action示例
public class LoginAction extends ActionSupport {
private String username;
private String password;
private UserService userService;
public String execute() {
try {
User user = userService.validateUser(username, password);
if (user != null) {
Map session = ActionContext.getContext().getSession();
session.put("user", user);
return SUCCESS;
} else {
addActionError("用户名或密码错误");
return ERROR;
}
} catch (Exception e) {
addActionError("登录过程出现异常");
return ERROR;
}
}
// getter和setter方法
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
// 其他getter/setter方法...
}

商品管理功能
商品管理模块支持管理员对婴幼儿产品进行增删改查操作。该功能采用Hibernate的Criteria API实现复杂的查询条件组合,支持按类别、价格区间、特价状态等多维度筛选。
// 商品服务层实现
@Service
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsDao goodsDao;
@Transactional
public List<Goods> searchGoods(GoodsSearchCriteria criteria) {
Criteria cr = goodsDao.getSession().createCriteria(Goods.class);
if (criteria.getLeibieId() != null) {
cr.add(Restrictions.eq("leibieId", criteria.getLeibieId()));
}
if (criteria.getMinPrice() != null) {
cr.add(Restrictions.ge("jiage", criteria.getMinPrice()));
}
if (criteria.getMaxPrice() != null) {
cr.add(Restrictions.le("jiage", criteria.getMaxPrice()));
}
if (StringUtils.isNotBlank(criteria.getShifoutejia())) {
cr.add(Restrictions.eq("shifoutejia", criteria.getShifoutejia()));
}
cr.add(Restrictions.eq("del", "no")); // 只显示未删除商品
return cr.list();
}
@Transactional
public void addGoods(Goods goods) {
goods.setDel("no");
goodsDao.save(goods);
}
}

购物车与订单处理
购物车功能采用Session存储临时数据,用户添加商品到购物车后,系统实时计算总价。下单时,系统通过Spring的事务管理确保订单主表和明细表的数据一致性。
// 订单服务实现
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private MingxiDao mingxiDao;
@Transactional
public String createOrder(Order order, List<CartItem> cartItems) {
try {
// 生成订单编号
String bianhao = "DD" + System.currentTimeMillis();
order.setBianhao(bianhao);
order.setXiadanshi(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
order.setZt("待付款");
// 保存订单主表
orderDao.save(order);
// 保存订单明细
for (CartItem item : cartItems) {
Mingxi mingxi = new Mingxi();
mingxi.setOrderid(order.getId());
mingxi.setGoodsId(item.getGoodsId());
mingxi.setGoodsShuliang(item.getQuantity());
mingxiDao.save(mingxi);
}
return bianhao;
} catch (Exception e) {
throw new RuntimeException("创建订单失败", e);
}
}
}

商品评价系统
评价功能允许用户对购买的商品进行评分和评论,为其他用户提供参考。系统通过t_pingjia表存储评价内容,关联商品ID和评价时间。
// 评价管理Action
public class PingjiaAction extends ActionSupport {
private Pingjia pingjia;
private PingjiaService pingjiaService;
public String addPingjia() {
try {
pingjia.setShijian(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
pingjiaService.addPingjia(pingjia);
addActionMessage("评价成功");
return SUCCESS;
} catch (Exception e) {
addActionError("评价失败:" + e.getMessage());
return ERROR;
}
}
public String listPingjia() {
try {
List<Pingjia> pingjiaList = pingjiaService.getPingjiaByGoodsId(pingjia.getGoodsid());
ActionContext.getContext().put("pingjiaList", pingjiaList);
return SUCCESS;
} catch (Exception e) {
addActionError("获取评价列表失败");
return ERROR;
}
}
}
实体模型设计
系统采用面向对象的设计思想,通过Hibernate映射将数据库表转换为Java实体类。每个实体类包含与数据库字段对应的属性以及相关的业务方法。
// 商品实体类
@Entity
@Table(name = "t_goods")
public class Goods implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "leibieId")
private Integer leibieId;
@Column(name = "mingcheng")
private String mingcheng;
@Column(name = "jieshao", length = 5000)
private String jieshao;
@Column(name = "jiage")
private Integer jiage;
@Column(name = "tejia")
private Integer tejia;
@Column(name = "shifoutejia")
private String shifoutejia;
@Column(name = "del")
private String del;
// 构造函数、getter和setter方法
public Goods() {}
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
// 其他getter/setter方法...
/**
* 检查商品是否处于特价状态
*/
public boolean isOnSale() {
return "是".equals(shifoutejia) && tejia != null && tejia > 0;
}
/**
* 获取商品当前价格(特价或原价)
*/
public Integer getCurrentPrice() {
return isOnSale() ? tejia : jiage;
}
}
功能展望与优化方向
性能优化建议
- 引入Redis缓存层:对热点商品数据、用户会话信息进行缓存,减轻数据库压力。可以配置Hibernate二级缓存与Redis集成,提升查询性能。
// Redis缓存配置示例
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
- 数据库查询优化:为频繁查询的字段添加索引,如t_goods表的leibieId、shifoutejia字段,t_order表的huiyuanId、zt字段等。
功能扩展建议
智能推荐系统:基于用户浏览和购买历史,实现个性化商品推荐。可以采用协同过滤算法,分析用户行为模式。
移动端适配:开发响应式前端或独立的移动APP,满足用户移动购物需求。可以考虑使用Vue.js或React重构前端界面。
微服务架构改造:将单体应用拆分为商品服务、订单服务、用户服务等微服务,提升系统可扩展性和维护性。
技术架构升级
引入消息队列:使用RabbitMQ或Kafka处理高并发下的订单创建、库存更新等操作,提高系统吞吐量。
分布式会话管理:采用Spring Session将会话数据存储到Redis中,支持多实例部署。
总结
该婴幼儿用品电商平台通过SSH框架的有机结合,实现了稳定可靠的在线销售功能。系统架构清晰,模块划分合理,具有良好的可扩展性和维护性。数据库设计考虑了电商业务的特点,表结构规范,关系明确。核心功能覆盖了用户管理、商品展示、购物车、订单处理等电商关键环节。
尽管系统基于传统SSH框架构建,但通过合理的架构设计和代码组织,仍然能够满足中小型婴幼儿用品电商的业务需求。未来通过引入现代技术栈和架构模式,可以进一步提升系统性能和用户体验,适应更大的业务规模和技术挑战。