基于SSH框架的宠物商城管理系统 - 源码深度解析
在传统宠物用品销售行业中,商家常常面临商品信息管理混乱、库存更新不及时、线上线下业务割裂等痛点。针对这些问题,我们设计并实现了一套基于SSH集成框架的宠物电商综合管理平台,通过信息化手段实现了从宠物信息维护、商品上架到订单处理的全流程数字化管理。
系统架构与技术栈
该平台采用经典的三层MVC架构,技术选型上使用成熟的SSH(Struts2 + Spring + Hibernate)框架组合,这种架构模式在Java企业级开发中具有广泛的应用基础。
分层架构详解
表现层:基于Struts2框架构建,通过Action类接收前端请求并调用业务逻辑。利用Struts2的拦截器机制实现权限校验与数据验证,确保请求的安全性和合法性。
业务层:由Spring框架的IoC容器统一管理Service组件,通过依赖注入降低模块间的耦合度。采用声明式事务管理确保核心业务操作的数据一致性,支持事务的传播行为和隔离级别配置。
数据持久化层:基于Hibernate实现对象关系映射(ORM),将业务实体与数据库表关联。利用HQL面向对象查询语言简化复杂数据操作,同时支持原生SQL查询以满足特殊需求。
<!-- Spring配置示例 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 事务管理配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
数据库设计亮点分析
商品表(shangpin)的精细化设计
商品表的设计体现了电商系统对商品属性的全面考量,采用反范式设计提升查询性能:
- 营销标识字段:包含
hot(热门标识)、tuijian(推荐标识)、zuixin(新品标识)等布尔类型字段,支持灵活的营销策略 - 价格体系:采用
double类型存储基础价格,设置hyjia(会员价)和dazhe(折扣)字段支持多级定价 - 商品分类:通过
sptype和sptypeid实现商品分类管理,支持多级分类扩展 - 审计字段:包含
pubren(发布人)和pubtime(发布时间)实现操作追踪
CREATE TABLE `shangpin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dazhe` int(11) NOT NULL COMMENT '打折',
`hot` int(11) NOT NULL COMMENT '热门',
`hyjia` int(11) NOT NULL COMMENT '会员价',
`jiage` double DEFAULT NULL COMMENT '价格',
`jieshao` text DEFAULT NULL COMMENT '介绍',
`name` varchar(2000) DEFAULT NULL COMMENT '名称',
`pubren` varchar(255) DEFAULT NULL COMMENT '发布人',
`pubtime` datetime DEFAULT NULL COMMENT '发布时间',
`spno` varchar(255) DEFAULT NULL COMMENT '商品编号',
`sptype` varchar(255) DEFAULT NULL COMMENT '商品类型',
`sptypeid` int(11) NOT NULL COMMENT '商品类型ID',
`tuijian` int(11) NOT NULL COMMENT '推荐',
`tupian` varchar(255) DEFAULT NULL COMMENT '图片',
`zuixin` int(11) NOT NULL COMMENT '最新',
PRIMARY KEY (`id`),
KEY `idx_hot` (`hot`),
KEY `idx_tuijian` (`tuijian`),
KEY `idx_sptypeid` (`sptypeid`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=gb2312 COLLATE=gb2312_chinese_ci COMMENT='商品表'
订单项表(dingdanitems)的分离设计
采用订单主从表分离设计,符合数据库第三范式,具有以下优势:
- 数据一致性:订单项独立记录商品快照信息,确保历史订单数据的完整性
- 查询优化:通过
ddno字段与订单主表关联,支持高效的联表查询 - 扩展性:支持一个订单包含多个商品项,满足复杂购物场景需求
CREATE TABLE `dingdanitems` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ddno` varchar(255) DEFAULT NULL COMMENT '订单号',
`des` varchar(255) DEFAULT NULL COMMENT '描述',
`jiage` varchar(255) DEFAULT NULL COMMENT '价格',
`shuliang` int(11) NOT NULL COMMENT '数量',
`spid` int(11) NOT NULL COMMENT '商品ID',
`spimage` varchar(255) DEFAULT NULL COMMENT '商品图片',
`spname` varchar(255) DEFAULT NULL COMMENT '商品名称',
`spno` varchar(255) DEFAULT NULL COMMENT '商品编号',
PRIMARY KEY (`id`),
KEY `idx_ddno` (`ddno`),
KEY `idx_spid` (`spid`),
CONSTRAINT `fk_dingdanitems_ddno` FOREIGN KEY (`ddno`) REFERENCES `dingdan` (`ddno`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=gb2312 COLLATE=gb2312_chinese_ci COMMENT='订单项表'
信息表(xinxi)的内容管理优化
信息表设计支持完整的内容管理系统功能:
- 互动指标:包含
clickcount(点击量)、agreecount(赞同数)、againstcount(反对数)等字段 - 内容权重:通过
tuijian(推荐)、hot(热门)、zuixin(最新)标识实现内容智能推荐 - 栏目管理:
lanmuid和lanmuming字段支持多级栏目分类,满足复杂的内容组织需求
核心功能实现
商品管理模块
商品管理模块为管理员提供完整的商品生命周期管理功能,采用标准的MVC模式实现:

Struts2 Action实现:
/**
* 商品管理Action类
* 负责接收前端请求,调用业务层处理商品相关操作
*/
public class ShangpinAction extends ActionSupport {
private Shangpin shangpin;
private List<Shangpin> shangpinList;
private ShangpinService shangpinService;
// 商品添加方法
public String add() {
try {
shangpin.setPubtime(new Date());
shangpinService.save(shangpin);
this.addActionMessage("商品添加成功!");
return SUCCESS;
} catch (Exception e) {
this.addActionError("商品添加失败:" + e.getMessage());
return ERROR;
}
}
// 商品列表查询
public String list() {
shangpinList = shangpinService.findAll();
return SUCCESS;
}
// 热门商品查询
public String findHot() {
shangpinList = shangpinService.findByHot(1);
return SUCCESS;
}
// 推荐商品查询
public String findTuijian() {
shangpinList = shangpinService.findByTuijian(1);
return SUCCESS;
}
}
服务层设计与实现: 采用接口与实现分离的设计模式,提高代码的可测试性和扩展性:
/**
* 商品服务接口
* 定义商品相关的业务操作契约
*/
public interface ShangpinService {
void save(Shangpin shangpin);
void update(Shangpin shangpin);
void delete(Integer id);
Shangpin findById(Integer id);
List<Shangpin> findAll();
List<Shangpin> findByHot(Integer hot);
List<Shangpin> findByTuijian(Integer tuijian);
List<Shangpin> findBySptype(Integer sptypeid);
}
/**
* 商品服务实现类
* 使用Spring的@Service注解标识业务组件
* 通过@Transactional注解管理事务
*/
@Service("shangpinService")
@Transactional
public class ShangpinServiceImpl implements ShangpinService {
@Autowired
private ShangpinDao shangpinDao;
@Override
@Transactional(readOnly = true)
public List<Shangpin> findByHot(Integer hot) {
return shangpinDao.findByHot(hot);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(Shangpin shangpin) {
// 业务逻辑验证
if (shangpin.getJiage() < 0) {
throw new IllegalArgumentException("商品价格不能为负数");
}
shangpinDao.save(shangpin);
}
@Override
@Transactional(readOnly = true)
public List<Shangpin> findAll() {
return shangpinDao.findAll();
}
}
订单处理系统
订单处理模块实现完整的购物车到订单生成的业务流程,采用分布式事务确保数据一致性:
关键技术特性:
- 事务管理:使用Spring的声明式事务管理,确保库存扣减和订单创建的原子性
- 并发控制:通过乐观锁机制处理高并发下的库存竞争问题
- 数据一致性:采用订单快照模式,保证历史订单信息的不可变性

订单业务逻辑示例:
/**
* 订单服务实现
*/
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private ShangpinDao shangpinDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void createOrder(Order order, List<OrderItem> items) {
// 验证库存
for (OrderItem item : items) {
Shangpin product = shangpinDao.findById(item.getSpid());
if (product.getKucun() < item.getShuliang()) {
throw new InventoryException("商品库存不足: " + product.getName());
}
}
// 扣减库存
for (OrderItem item : items) {
shangpinDao.reduceInventory(item.getSpid(), item.getShuliang());
}
// 创建订单
orderDao.save(order);
orderDao.saveOrderItems(items);
}
}
系统优化与扩展
性能优化策略
数据库优化:
- 合理设计索引,避免全表扫描
- 使用连接池管理数据库连接
- 实施读写分离策略
缓存机制:
- 使用Ehcache缓存热点数据
- 实现页面静态化提升访问速度
代码优化:
- 采用懒加载策略减少不必要的数据库查询
- 使用DTO模式优化数据传输效率
安全防护措施
- SQL注入防护:使用Hibernate的参数化查询
- XSS攻击防护:对用户输入进行过滤和转义
- 权限控制:基于角色的访问控制(RBAC)模型
- 会话管理:防止会话固定攻击
该宠物商城管理系统通过SSH框架的有机整合,实现了高内聚、低耦合的架构设计,为传统宠物用品销售行业提供了完整的信息化解决方案。系统具有良好的可扩展性和维护性,为后续的功能迭代和技术升级奠定了坚实基础。