基于SSM框架的在线美甲商城销售系统 - 源码深度解析
在美妆行业数字化转型的浪潮中,专业美甲产品的线上销售与服务平台已成为连接品牌商、美甲师与终端消费者的重要桥梁。本系统采用成熟的SSM(Spring + Spring MVC + MyBatis)技术架构,构建了一个集商品展示、在线交易、库存管理和订单处理于一体的综合性电商平台,为美甲行业提供专业化的数字解决方案。
系统架构与技术栈设计
该平台采用经典的三层架构模式,通过SSM框架实现各层之间的松耦合设计,确保系统的高可维护性和可扩展性。
核心技术组件解析
Spring框架作为核心控制容器,采用IoC(控制反转)和DI(依赖注入)机制管理所有业务组件的生命周期和依赖关系。通过声明式事务管理(@Transactional注解)确保数据操作的ACID特性,特别是在复杂的业务场景下保证数据一致性。
Spring MVC模块基于前端控制器模式(DispatcherServlet)统一处理HTTP请求,采用注解驱动的控制器(@Controller、@RequestMapping)简化开发流程。支持RESTful风格的API设计,为未来移动端扩展预留接口,同时提供灵活的数据绑定和验证机制。
持久层使用MyBatis框架,通过XML映射文件实现对象关系映射(ORM),既保留了SQL的灵活性,又简化了数据库操作。MyBatis的动态SQL功能特别适合复杂查询场景,如多条件商品筛选。
技术栈配置示例
<!-- Spring核心配置示例 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/nail_db?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="20"/>
</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"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
前端采用JSP+JSTL技术组合,配合Ajax和JavaScript实现动态交互效果,Bootstrap框架确保响应式布局和界面风格统一。
数据库架构深度解析
系统数据库设计充分考虑了美甲行业的业务特性,通过11张核心表构建完整的数据模型,采用UTF-8字符集支持多语言环境。
关键表结构设计亮点
1. 美甲商品表(meijia) - 纵向扩展设计
CREATE TABLE `meijia` (
`meijiaid` varchar(255) NOT NULL COMMENT '美甲ID',
`meijianame` varchar(255) DEFAULT NULL COMMENT '美甲名称',
`image` varchar(255) DEFAULT NULL COMMENT '图片',
`cateid` varchar(255) DEFAULT NULL COMMENT '分类ID',
`price` varchar(255) DEFAULT NULL COMMENT '价格',
`recommend` varchar(255) DEFAULT NULL COMMENT '推荐',
`thestart` varchar(255) DEFAULT NULL COMMENT '开始时间',
`theend` varchar(255) DEFAULT NULL COMMENT '结束时间',
`hits` varchar(255) DEFAULT NULL COMMENT '点击量',
`sellnum` varchar(255) DEFAULT NULL COMMENT '销售数量',
`contents` varchar(6000) DEFAULT NULL COMMENT '内容',
PRIMARY KEY (`meijiaid`),
KEY `idx_cateid` (`cateid`),
KEY `idx_recommend` (`recommend`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='美甲表'
技术特色分析:
- 采用分布式ID生成策略:"A"+时间戳+随机数,确保高并发下的唯一性
- contents字段支持HTML富文本内容,满足商品详细描述需求
- 建立复合索引优化查询性能,特别是分类查询和推荐商品查询
- 通过hits和sellnum字段实现商品热度统计,为推荐算法提供数据支持
2. 配货点表(peihuo) - O2O业务模式支持
CREATE TABLE `peihuo` (
`peihuoid` varchar(255) NOT NULL COMMENT '配货点ID',
`peihuoname` varchar(255) DEFAULT NULL COMMENT '配货点名称',
`cityid` varchar(255) DEFAULT NULL COMMENT '城市ID',
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`contact` varchar(255) DEFAULT NULL COMMENT '联系方式',
`memo` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`peihuoid`),
KEY `idx_cityid` (`cityid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='配货点表'
该表支持多城市配送体系,通过cityid与城市表关联,实现基于地理位置的智能配送和库存管理优化。
3. 分类表(cate) - 灵活的品类管理
CREATE TABLE `cate` (
`cateid` varchar(255) NOT NULL COMMENT '分类ID',
`catename` varchar(255) DEFAULT NULL COMMENT '分类名称',
`memo` varchar(255) DEFAULT NULL COMMENT '备注',
`addtime` varchar(255) DEFAULT NULL COMMENT '添加时间',
PRIMARY KEY (`cateid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分类表'
支持美甲产品按功能、款式、品牌等多维度分类管理,为后续的商品智能推荐打下基础。

核心业务功能实现
商品管理与展示模块
商品管理模块严格遵循MVC设计模式,各层职责清晰,代码可维护性强。
商品实体类设计 - 业务对象完整性
@Entity
@Table(name = "meijia")
public class Meijia implements Serializable {
private static final long serialVersionUID = 1L;
private String meijiaid;
private String meijianame;
private String image;
private String cateid;
private String price;
private String recommend;
private String thestart;
private String theend;
private String hits;
private String sellnum;
private String contents;
// Getter和Setter方法
@Id
@Column(name = "meijiaid", unique = true, nullable = false)
public String getMeijiaid() {
return meijiaid;
}
public void setMeijiaid(String meijiaid) {
this.meijiaid = meijiaid;
}
// 其他属性的Getter和Setter...
/**
* 商品是否在售状态判断
*/
@Transient
public boolean isOnSale() {
Date now = new Date();
Date start = parseDate(thestart);
Date end = parseDate(theend);
return now.after(start) && now.before(end);
}
}
商品服务层 - 复杂业务逻辑封装
@Service
@Transactional
public class MeijiaService {
@Autowired
private MeijiaMapper meijiaMapper;
/**
* 获取推荐商品列表
*/
public List<Meijia> getRecommendedProducts(int limit) {
Map<String, Object> params = new HashMap<>();
params.put("recommend", "1"); // 推荐商品标识
params.put("limit", limit);
params.put("status", "1"); // 上架状态
return meijiaMapper.selectByCondition(params);
}
/**
* 分页查询分类商品
*/
public PageInfo<Meijia> getProductsByCategory(String cateid, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Meijia> products = meijiaMapper.selectByCateId(cateid);
return new PageInfo<>(products);
}
/**
* 更新商品点击量 - 支持并发安全
*/
@Transactional
public void updateProductHits(String meijiaid) {
Meijia product = meijiaMapper.selectById(meijiaid);
if (product != null) {
int hits = Integer.parseInt(product.getHits()) + 1;
product.setHits(String.valueOf(hits));
meijiaMapper.update(product);
}
}
/**
* 商品搜索功能
*/
public List<Meijia> searchProducts(String keyword, String cateid, String orderBy) {
Map<String, Object> params = new HashMap<>();
if (StringUtils.isNotBlank(keyword)) {
params.put("keyword", "%" + keyword + "%");
}
params.put("cateid", cateid);
params.put("orderBy", orderBy); // 支持价格、销量、点击量排序
return meijiaMapper.searchProducts(params);
}
}

购物车与订单处理系统
购物车模块采用Session与数据库结合的混合存储方案,既保证未登录用户的购物体验,又确保登录后数据的持久化。
购物车数据结构设计
@Component
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ShoppingCart {
private Map<String, CartItem> items = new ConcurrentHashMap<>();
/**
* 添加商品到购物车
*/
public void addItem(Meijia product, int quantity) {
String productId = product.getMeijiaid();
if (items.containsKey(productId)) {
CartItem existingItem = items.get(productId);
existingItem.setQuantity(existingItem.getQuantity() + quantity);
} else {
CartItem newItem = new CartItem(product, quantity);
items.put(productId, newItem);
}
}
/**
* 计算购物车总金额
*/
public BigDecimal getTotalAmount() {
return items.values().stream()
.map(item -> item.getSubtotal())
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
// 其他购物车操作方法...
}
订单处理流程关键代码
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private InventoryService inventoryService;
/**
* 创建订单 - 完整的事务管理
*/
@Transactional(rollbackFor = Exception.class)
public Order createOrder(Order order, List<OrderItem> items) {
// 1. 库存检查
for (OrderItem item : items) {
if (!inventoryService.checkInventory(item.getProductId(), item.getQuantity())) {
throw new InventoryShortageException("商品库存不足");
}
}
// 2. 生成订单号
order.setOrderId(generateOrderId());
order.setCreateTime(new Date());
order.setStatus(OrderStatus.PENDING_PAYMENT);
// 3. 保存订单主信息
orderMapper.insertOrder(order);
// 4. 保存订单明细
for (OrderItem item : items) {
item.setOrderId(order.getOrderId());
orderMapper.insertOrderItem(item);
// 5. 扣减库存
inventoryService.deductInventory(item.getProductId(), item.getQuantity());
}
return order;
}
}
本系统通过精细的模块划分和严谨的技术实现,为美甲行业提供了一个稳定、高效、易扩展的在线销售平台,展现了SSM框架在企业级应用开发中的强大能力。