基于SSM框架的鲜花在线销售平台 - 源码深度解析

JavaScriptHTMLCSSSSM框架MySQL
2026-02-0740 浏览

文章摘要

本鲜花在线销售平台基于SSM(Spring+SpringMVC+MyBatis)框架构建,旨在解决传统鲜花零售行业信息不透明、交易效率低、库存管理困难等核心痛点。平台通过标准化的电商业务流程,将鲜花选购、在线支付、订单跟踪、库存同步等环节数字化,为商家降低运营成本,为消费者提供便捷透明的购物体验。系...

基于SSM框架的鲜花在线销售平台 - 源码深度解析

随着互联网技术的快速发展,传统鲜花零售行业面临着信息不透明、交易效率低下、库存管理困难等痛点。鲜花在线销售平台应运而生,采用成熟的SSM(Spring+SpringMVC+MyBatis)框架构建,为中小型花店和花卉批发商提供完整的电商解决方案。该系统通过标准化的业务流程,实现了鲜花选购、在线支付、订单跟踪、库存同步等核心功能的数字化管理。

系统架构与技术栈

该平台采用典型的三层架构设计,前端使用HTML、CSS和JavaScript构建用户界面,后端基于SSM框架实现业务逻辑。

技术栈详解

前端技术:

  • HTML5 + CSS3:构建响应式用户界面
  • JavaScript/jQuery:实现动态交互效果
  • Bootstrap框架:保证跨设备兼容性

后端技术栈:

  • Spring框架:负责依赖注入和事务管理,确保业务组件的松耦合和数据一致性
  • SpringMVC:作为Web层框架,处理用户请求的路由和视图渲染,实现前后端分离的开发模式
  • MyBatis:作为持久层框架,通过灵活的XML配置实现数据库操作的映射,支持动态SQL生成
// Spring配置示例
@Configuration
@EnableTransactionManagement
@ComponentScan("com.spring.service")
public class SpringConfig {
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/flower_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        // 连接池配置优化
        dataSource.setInitialSize(5);
        dataSource.setMinIdle(5);
        dataSource.setMaxActive(20);
        dataSource.setMaxWait(60000);
        return dataSource;
    }
}

数据库设计亮点

购物车表设计优化

gouwuche表的设计体现了电商平台的核心业务需求,采用适当的字段类型和索引策略确保高性能的购物车操作:

CREATE TABLE `gouwuche` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `flowerxinxiid` int(10) unsigned NOT NULL COMMENT '鲜花信息id',
  `flowerbianhao` varchar(50) NOT NULL COMMENT '鲜花编号',
  `flowermingcheng` varchar(255) NOT NULL COMMENT '鲜花名称',
  `fenlei` int(10) unsigned NOT NULL COMMENT '分类',
  `xiaoshoujiage` decimal(18,2) NOT NULL COMMENT '销售价格',
  `goumaishuliang` int(11) NOT NULL COMMENT '购买数量',
  `xiaoji` decimal(18,2) NOT NULL COMMENT '小计',
  `goumairen` varchar(50) NOT NULL COMMENT '购买人',
  `addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
  PRIMARY KEY (`id`),
  KEY `gouwuche_flowerxinxiid_index` (`flowerxinxiid`),
  KEY `gouwuche_fenlei_index` (`fenlei`),
  KEY `gouwuche_goumairen_index` (`goumairen`) -- 新增用户索引优化查询
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='购物车'

设计亮点分析:

  • 精确数值处理:使用decimal(18,2)类型存储金额,确保财务计算的精确性
  • 索引优化策略:为关键查询字段建立复合索引,优化关联查询性能
  • 预计算优化xiaoji字段预计算小计金额,减少实时计算开销
  • 存储引擎选择:采用InnoDB存储引擎,支持事务处理和行级锁定
  • 字符集配置:统一使用utf8字符集,支持多语言环境

订单信息表的关系设计

dingdanxinxi表与dingdanqianshou_dingdanxinxi表构成了完整的订单管理体系:

CREATE TABLE `dingdanxinxi` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dingdanbianhao` varchar(50) NOT NULL UNIQUE COMMENT '订单编号',
  `dingdanxinxi` text NOT NULL COMMENT '订单信息',
  `zongjijine` decimal(18,2) NOT NULL COMMENT '总计金额',
  `shouhuoren` varchar(50) NOT NULL COMMENT '收货人',
  `dianhua` varchar(50) NOT NULL COMMENT '电话',
  `dizhi` varchar(255) NOT NULL COMMENT '地址',
  `beizhu` text NOT NULL COMMENT '备注',
  `zhuangtai` enum('待支付','已支付','配送中','已完成','已取消') NOT NULL COMMENT '状态',
  `xiadanren` varchar(50) NOT NULL COMMENT '下单人',
  `iszf` varchar(10) NOT NULL DEFAULT '否' COMMENT '是否支付',
  `addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
  PRIMARY KEY (`id`),
  KEY `dingdanxinxi_xiadanren_index` (`xiadanren`),
  KEY `dingdanxinxi_zhuangtai_index` (`zhuangtai`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单信息'

订单管理界面

核心功能实现

用户购物车管理

购物车功能采用Session与数据库结合的方式实现,确保用户数据的持久化和一致性:

@Controller
@RequestMapping("/cart")
public class CartController extends BaseController {
    
    @Autowired
    private GouwucheService gouwucheService;
    
    @RequestMapping("/add")
    @ResponseBody
    public Map<String, Object> addToCart(HttpServletRequest request) {
        Map<String, Object> result = new HashMap<>();
        try {
            String flowerxinxiid = Request.get("flowerxinxiid");
            String goumaishuliang = Request.get("goumaishuliang");
            String goumairen = session.getAttribute("username").toString();
            
            // 参数验证
            if(StringUtils.isEmpty(flowerxinxiid) || StringUtils.isEmpty(goumaishuliang)) {
                result.put("success", false);
                result.put("message", "参数不完整");
                return result;
            }
            
            // 检查商品是否已存在购物车
            Example example = new Example(Gouwuche.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo("flowerxinxiid", flowerxinxiid);
            criteria.andEqualTo("goumairen", goumairen);
            
            List<Gouwuche> list = gouwucheService.selectExample(example);
            if(list.size() > 0) {
                // 更新数量
                Gouwuche cart = list.get(0);
                int newQuantity = cart.getGoumaishuliang() + Integer.parseInt(goumaishuliang);
                cart.setGoumaishuliang(newQuantity);
                cart.setXiaoji(cart.getXiaoshoujiage().multiply(new BigDecimal(newQuantity)));
                gouwucheService.update(cart);
            } else {
                // 新增购物车项
                Gouwuche cart = new Gouwuche();
                // 设置商品基本信息
                cart.setFlowerxinxiid(Integer.parseInt(flowerxinxiid));
                cart.setGoumaishuliang(Integer.parseInt(goumaishuliang));
                cart.setGoumairen(goumairen);
                // 查询商品详情并设置其他字段
                FlowerXinxi flower = flowerService.selectById(flowerxinxiid);
                if(flower != null) {
                    cart.setFlowerbianhao(flower.getBianhao());
                    cart.setFlowermingcheng(flower.getMingcheng());
                    cart.setFenlei(flower.getFenlei());
                    cart.setXiaoshoujiage(flower.getXiaoshoujiage());
                    cart.setXiaoji(flower.getXiaoshoujiage().multiply(new BigDecimal(goumaishuliang)));
                }
                gouwucheService.insert(cart);
            }
            
            result.put("success", true);
            result.put("message", "添加成功");
        } catch (Exception e) {
            result.put("success", false);
            result.put("message", "系统错误:" + e.getMessage());
        }
        return result;
    }
}

购物车管理界面

订单处理流程

订单处理采用状态机模式,确保订单状态流转的准确性:

@Service
@Transactional
public class OrderService {
    
    @Autowired
    private DingdanxinxiMapper dingdanxinxiMapper;
    
    @Autowired
    private GouwucheService gouwucheService;
    
    @Autowired
    private InventoryService inventoryService;
    
    public OrderResult createOrder(Dingdanxinxi order, List<Gouwuche> cartItems) {
        OrderResult result = new OrderResult();
        try {
            // 生成唯一订单编号
            String orderNo = generateOrderNumber();
            order.setDingdanbianhao(orderNo);
            
            // 计算总金额并验证库存
            BigDecimal totalAmount = BigDecimal.ZERO;
            for(Gouwuche item : cartItems) {
                // 检查库存是否充足
                if(!inventoryService.checkInventory(item.getFlowerxinxiid(), item.getGoumaishuliang())) {
                    throw new InventoryException("商品库存不足");
                }
                totalAmount = totalAmount.add(item.getXiaoji());
            }
            order.setZongjijine(totalAmount);
            
            // 设置订单初始状态
            order.setZhuangtai("待支付");
            order.setIszf("否");
            
            // 保存订单信息
            dingdanxinxiMapper.insert(order);
            
            // 扣减库存
            for(Gouwuche item : cartItems) {
                inventoryService.reduceInventory(item.getFlowerxinxiid(), item.getGoumaishuliang());
            }
            
            // 清空购物车
            gouwucheService.clearCart(order.getXiadanren());
            
            result.setSuccess(true);
            result.setOrderNo(orderNo);
            result.setMessage("订单创建成功");
            
        } catch (Exception e) {
            result.setSuccess(false);
            result.setMessage("订单创建失败:" + e.getMessage());
            // 事务回滚
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        return result;
    }
    
    private String generateOrderNumber() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timestamp = sdf.format(new Date());
        Random random = new Random();
        return "DD" + timestamp + String.format("%04d", random.nextInt(10000));
    }
}

性能优化策略

数据库层面优化:

  • 使用连接池技术管理数据库连接
  • 合理设置索引,避免全表扫描
  • 采用读写分离架构提升并发处理能力

业务层面优化:

  • 实现页面静态化,减少动态内容生成
  • 使用Redis缓存热点数据
  • 采用消息队列处理异步任务

该系统通过SSM框架的合理运用,为鲜花电商行业提供了稳定、高效的解决方案,具有良好的扩展性和维护性。

本文关键词
SSM框架鲜花电商系统源码解析购物车表设计数据库优化

上下篇

上一篇
没有更多文章
下一篇
没有更多文章