随着互联网技术的快速发展,传统鲜花零售行业面临着转型升级的迫切需求。传统花店受限于地域和营业时间,客户触达范围有限,商品展示形式单一,难以满足现代消费者的便捷购物需求。鲜花电商平台应运而生,为行业提供了数字化解决方案。
该鲜花电商系统采用成熟的SSM(Spring+SpringMVC+MyBatis)技术栈构建,实现了完整的在线销售业务流程。系统采用经典的三层架构设计,表现层由SpringMVC框架处理HTTP请求和视图渲染,业务逻辑层通过Spring IoC容器管理服务组件,数据持久层使用MyBatis框架操作MySQL数据库。
系统架构与技术栈
技术架构深度解析:
- Spring框架:作为整个系统的核心,负责依赖注入和事务管理。通过@Transactional注解实现声明式事务控制,确保订单处理、库存更新等关键操作的原子性
- SpringMVC框架:采用注解驱动的控制器设计,简化了请求映射和参数绑定流程。支持RESTful风格的API设计,提高系统可扩展性
- MyBatis框架:通过XML映射文件实现灵活的SQL编写,支持动态SQL和结果集映射,提升数据库操作效率
- 前端技术:结合JSP、HTML5、CSS3和JavaScript,实现响应式用户界面,确保在不同设备上的良好体验
<!-- Spring配置示例 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
数据库设计亮点分析
商品表设计优化
product表的设计体现了电商系统的核心需求:
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`productname` varchar(255) DEFAULT NULL COMMENT '商品名称',
`filename` varchar(255) DEFAULT NULL COMMENT '商品图片',
`price` double DEFAULT NULL COMMENT '原价',
`discount` double DEFAULT NULL COMMENT '折扣价',
`categoryid` varchar(255) DEFAULT NULL COMMENT '分类ID',
`content` text DEFAULT NULL COMMENT '商品描述',
`vote` int(11) DEFAULT NULL COMMENT '投票数',
`delstatus` varchar(255) DEFAULT NULL COMMENT '删除状态',
`looknum` int(11) DEFAULT NULL COMMENT '浏览数',
`isxs` varchar(255) DEFAULT NULL COMMENT '是否限时',
`jdcontent` text DEFAULT NULL COMMENT '详细介绍',
`issj` varchar(255) DEFAULT NULL COMMENT '是否上架',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT='商品表'
设计亮点:
- 价格字段分离:独立的
price和discount字段支持灵活的促销策略 - 软删除设计:
delstatus字段实现逻辑删除,保留历史数据 - 浏览统计:
looknum字段为商品热度分析提供数据支持 - 状态管理:
isxs(限时促销)和issj(上架状态)实现精细化的商品生命周期管理
订单表业务逻辑设计
ordermsg表的设计涵盖了完整的订单处理流程:
CREATE TABLE `ordermsg` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`orderno` varchar(255) DEFAULT NULL COMMENT '订单号',
`memberid` varchar(255) DEFAULT NULL COMMENT '会员ID',
`total` varchar(255) DEFAULT NULL COMMENT '订单总额',
`fkstatus` varchar(255) DEFAULT NULL COMMENT '付款状态',
`fhstatus` varchar(255) DEFAULT NULL COMMENT '发货状态',
`shstatus` varchar(255) DEFAULT NULL COMMENT '收货状态',
`addrid` varchar(255) DEFAULT NULL COMMENT '收货地址ID',
`savetime` varchar(255) DEFAULT NULL COMMENT '下单时间',
`shfs` varchar(255) DEFAULT NULL COMMENT '送货方式',
`issd` varchar(255) DEFAULT NULL COMMENT '是否送达',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT='订单主表'
状态机设计: 通过fkstatus、fhstatus、shstatus、issd四个状态字段,构建了完整的订单状态流转机制,确保订单处理流程的清晰可控。

核心功能实现详解
1. 商品管理与展示系统
商品管理模块采用MVC模式实现,控制器负责接收请求,服务层处理业务逻辑,DAO层进行数据持久化操作。
@Controller
@RequestMapping("/product")
public class ProductController {
@Resource
private ProductService productService;
@RequestMapping("/list")
public String productList(@RequestParam(defaultValue = "1") int page,
HttpServletRequest request) {
PageHelper.startPage(page, 12);
List<Product> products = productService.findOnShelfProducts();
PageInfo<Product> pageInfo = new PageInfo<>(products);
request.setAttribute("pageInfo", pageInfo);
return "product/list";
}
@RequestMapping("/detail/{id}")
public String productDetail(@PathVariable int id,
HttpServletRequest request) {
Product product = productService.findById(id);
// 增加浏览计数
productService.incrementLookNum(id);
request.setAttribute("product", product);
return "product/detail";
}
}
商品详情页面实现逻辑:
- 通过
@PathVariable注解获取商品ID - 查询商品详细信息并递增浏览计数
- 返回JSP页面进行视图渲染

2. 购物车与订单处理引擎
购物车功能采用Session存储方式,确保用户添加商品的实时性。订单处理模块实现了完整的业务流程。
@Service
@Transactional
public class OrderService {
@Resource
private OrderDAO orderDAO;
@Resource
private ProductDAO productDAO;
public String createOrder(OrderMsg order, List<CartItem> cartItems) {
// 生成订单号
String orderNo = generateOrderNo();
order.setOrderno(orderNo);
order.setSavetime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// 计算订单总额
double total = calculateTotal(cartItems);
order.setTotal(String.valueOf(total));
// 保存订单主信息
orderDAO.save(order);
// 保存订单明细并更新库存
for (CartItem item : cartItems) {
OrderDetail detail = new OrderDetail();
detail.setOrderid(order.getId());
detail.setProductid(item.getProductId());
detail.setNum(item.getQuantity());
orderDAO.saveDetail(detail);
// 更新商品库存
productDAO.decreaseStock(item.getProductId(), item.getQuantity());
}
return orderNo;
}
private String generateOrderNo() {
return "FL" + System.currentTimeMillis() +
String.format("%04d", new Random().nextInt(10000));
}
}

3. 用户地址管理系统
地址管理模块支持用户维护多个收货地址,并提供默认地址设置功能。
@Controller
@RequestMapping("/address")
public class AddressController {
@Resource
private AddressDAO addressDAO;
@RequestMapping("/add")
@ResponseBody
public Map<String, Object> addAddress(Address address,
HttpSession session) {
Map<String, Object> result = new HashMap<>();
try {
Member member = (Member) session.getAttribute("member");
address.setMemberid(member.getId());
address.setDelstatus("0"); // 未删除
addressDAO.save(address);
result.put("success", true);
result.put("message", "地址添加成功");
} catch (Exception e) {
result.put("success", false);
result.put("message", "地址添加失败");
}
return result;
}
@RequestMapping("/list")
public String addressList(HttpSession session,
HttpServletRequest request) {
Member member = (Member) session.getAttribute("member");
List<Address> addresses = addressDAO.findByMemberId(member.getId());
request.setAttribute("addresses", addresses);
return "member/address_list";
}
}

4. 后台管理系统实现
后台管理模块采用RBAC(基于角色的访问控制)模式,实现权限分级管理。
@Controller
@RequestMapping("/admin")
public class AdminProductController extends BaseAdminController {
@Resource
private ProductService productService;
@RequestMapping("/product/list")
public String productList(@RequestParam Map<String, Object> params,
HttpServletRequest request) {
PageHelper.startPage(getPageNum(request), getPageSize(request));
List<Product> products = productService.findByParams(params);
PageInfo<Product> pageInfo = new PageInfo<>(products);
request.setAttribute("pageInfo", pageInfo);
request.setAttribute("params", params);
return "admin/product/list";
}
@RequestMapping(value = "/product/save", method = RequestMethod.POST)
public String saveProduct(Product product,
@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
String filename = fileUploadService.uploadImage(file);
product.setFilename(filename);
}
productService.save(product);
return "redirect:list.do";
}
}

实体模型设计
系统采用标准的Java Bean规范设计实体类,每个实体对应数据库中的一张表。
@Entity
@Table(name = "product")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String productname;
private String filename;
private Double price;
private Double discount;
private Integer categoryid;
private String content;
private Integer vote;
private String delstatus;
private Integer looknum;
private String isxs;
private String jdcontent;
private String issj;
// Getter和Setter方法
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
@Column(name = "productname")
public String getProductname() { return productname; }
public void setProductname(String productname) { this.productname = productname; }
// 其他属性的Getter和Setter...
@Transient
public Double getDiscountPrice() {
return discount != null ? discount : price;
}
}
实体设计特点:
- 使用JPA注解实现对象关系映射
- 包含业务逻辑方法(如
getDiscountPrice()) - 支持序列化接口,便于缓存存储
功能展望与优化方向
1. 性能优化与缓存策略
现状分析: 当前系统直接访问数据库,高并发场景下可能存在性能瓶颈。
优化方案:
@Service
public class ProductServiceWithCache {
@Resource
private RedisTemplate<String, Product> redisTemplate;
@Cacheable(value = "products", key = "#id")
public Product findById(Integer id) {
// 先查缓存,缓存不存在再查数据库
Product product = redisTemplate.opsForValue().get("product:" + id);
if (product == null) {
product = productDAO.findById(id);
redisTemplate.opsForValue().set("product:" + id, product, 30, TimeUnit.MINUTES);
}
return product;
}
}
2. 微服务架构改造
架构升级: 将单体应用拆分为商品服务、订单服务、用户服务等微服务。
技术选型:
- 服务注册与发现:Nacos或Consul
- 服务网关:Spring Cloud Gateway
- 配置中心:Spring Cloud Config
- 服务调用:OpenFeign
3. 移动端适配与API重构
移动优先策略:
- 开发RESTful API接口
- 实现前后端分离架构
- 支持小程序、APP等多端接入
@RestController
@RequestMapping("/api/v1")
public class ProductApiController {
@GetMapping("/products/{id}")
public ResponseEntity<ApiResult<Product>> getProduct(@PathVariable Integer id) {
try {
Product product = productService.findById(id);
return ResponseEntity.ok(ApiResult.success(product));
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(ApiResult.error("商品不存在"));
}
}
@PostMapping("/orders")
public ResponseEntity<ApiResult<String>> createOrder(@RequestBody OrderRequest request) {
// 处理订单创建逻辑
String orderNo = orderService.createOrder(request);
return ResponseEntity.ok(ApiResult.success(orderNo));
}
}
4. 智能推荐系统集成
个性化推荐:
- 基于用户行为数据的协同过滤算法
- 实时推荐引擎集成
- 机器学习模型训练与部署
5. 支付与物流系统增强
支付集成: 支持微信支付、支付宝等多种支付方式 物流跟踪: 集成第三方物流API,实现实时物流追踪
总结
该鲜花电商平台基于成熟的SSM技术栈构建,具备完整的电商功能体系。系统采用分层架构设计,代码结构清晰,便于维护和扩展。数据库设计合理,考虑了业务扩展性和性能需求。核心功能模块实现完善,涵盖了商品管理、订单处理、用户管理等电商核心业务流程。
通过引入缓存机制、微服务架构改造、移动端适配等优化方案,可以进一步提升系统的性能、可扩展性和用户体验。系统为传统鲜花零售行业提供了完整的数字化转型解决方案,具有良好的市场应用前景。