基于SSM框架的在线电子产品销售平台 - 源码深度解析

JavaJavaScriptHTMLCSSSSM框架MavenMySQL
2026-02-0711 浏览

文章摘要

本在线电子产品销售平台基于经典的SSM(Spring + Spring MVC + MyBatis)框架构建,旨在为电子产品商家提供一个功能完整、稳定可靠的线上销售与业务管理解决方案。其核心业务价值在于解决了传统线下销售或简单网店模式中普遍存在的管理效率低下、业务流程割裂的痛点。平台通过将商品展示、...

在当今数字化零售时代,电子产品销售行业面临着管理效率与客户体验的双重挑战。传统线下销售模式存在信息不透明、库存管理困难等问题,而简单的网店系统又难以满足复杂的业务管理需求。为此,我们设计并实现了一套企业级电子产品销售管理平台,该系统基于成熟的SSM框架技术栈,为中小型电子产品零售商提供完整的线上销售解决方案。

系统架构与技术栈

该平台采用经典的三层架构设计,确保系统的高内聚低耦合。表现层使用Spring MVC框架处理用户请求,通过注解驱动的控制器清晰定义URL映射。业务逻辑层由Spring框架的IoC容器统一管理Service组件,利用声明式事务管理确保核心业务操作的数据一致性。数据持久层采用MyBatis框架,通过灵活的XML映射文件配置SQL语句,实现了高效的对象关系映射。

技术栈配置如下:

<dependencies>
    <!-- Spring核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.8</version>
    </dependency>
    
    <!-- MyBatis集成 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>
    
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
</dependencies>

数据库设计亮点分析

商品表(item)设计优化

商品表作为系统的核心数据载体,其设计体现了多重优化考虑:

CREATE TABLE `item` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(255) DEFAULT NULL COMMENT '商品名称',
  `price` varchar(255) DEFAULT NULL COMMENT '商品价格',
  `scNum` int(11) DEFAULT NULL COMMENT '收藏数',
  `gmNum` int(11) DEFAULT NULL COMMENT '购买数',
  `url1` varchar(255) DEFAULT NULL COMMENT '图片URL1',
  `url2` varchar(255) DEFAULT NULL COMMENT '图片URL2',
  `url3` varchar(255) DEFAULT NULL COMMENT '图片URL3',
  `url4` varchar(255) DEFAULT NULL COMMENT '图片URL4',
  `url5` varchar(255) DEFAULT NULL COMMENT '图片URL5',
  `ms` text DEFAULT NULL COMMENT '商品描述',
  `pam1` varchar(255) DEFAULT NULL COMMENT '参数1',
  `pam2` varchar(255) DEFAULT NULL COMMENT '参数2',
  `pam3` varchar(255) DEFAULT NULL COMMENT '参数3',
  `val3` varchar(255) DEFAULT NULL COMMENT '值3',
  `val2` varchar(255) DEFAULT NULL COMMENT '值2',
  `val1` varchar(255) DEFAULT NULL COMMENT '值1',
  `type` int(11) DEFAULT NULL COMMENT '商品类型',
  `zk` int(10) DEFAULT NULL COMMENT '折扣',
  `category_id_one` int(11) DEFAULT NULL COMMENT '一级分类ID',
  `category_id_two` int(11) DEFAULT NULL COMMENT '二级分类ID',
  `isDelete` int(2) DEFAULT NULL COMMENT '0否 1是',
  PRIMARY KEY (`id`),
  KEY `idx_category` (`category_id_one`,`category_id_two`),
  KEY `idx_type` (`type`),
  KEY `idx_delete` (`isDelete`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='商品表'

设计亮点分析

  1. 多图片存储设计:采用url1-url5字段分别存储商品的不同角度图片,既保证了展示灵活性,又避免了单字段存储多个URL带来的解析复杂度。
  2. 参数化商品属性:通过pam1-pam3和val1-val3的键值对设计,实现了商品规格参数的动态扩展,适应不同类型电子产品的特性差异。
  3. 复合索引优化:为分类查询建立了复合索引idx_category,显著提升按分类筛选商品的性能。
  4. 软删除机制isDelete字段实现软删除,保留历史数据的同时确保数据安全性。

购物车表(car)业务逻辑设计

购物车表的设计充分考虑了并发操作和业务扩展性:

CREATE TABLE `car` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `item_id` int(11) DEFAULT NULL COMMENT '商品ID',
  `user_id` int(11) DEFAULT NULL COMMENT '用户ID',
  `num` int(11) DEFAULT NULL COMMENT '数量',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  `total` varchar(255) DEFAULT NULL COMMENT '总价',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_item` (`user_id`,`item_id`),
  KEY `idx_user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='购物车表'

关键技术点

  • 唯一约束设计uk_user_item唯一索引防止同一用户重复添加同一商品到购物车
  • 价格快照机制price字段存储加入购物车时的商品价格,避免后续价格变动影响已选商品
  • 计算字段分离total字段存储计算后的总价,减少实时计算开销

核心功能实现详解

1. 用户登录与身份认证

系统采用基于Session的身份认证机制,确保用户访问安全。登录控制器实现了完整的参数验证和异常处理:

@Controller
@RequestMapping("/user")
public class UserController extends BaseController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping("/login")
    @ResponseBody
    public String login(HttpServletRequest request, 
                       HttpServletResponse response,
                       @RequestParam String username,
                       @RequestParam String password) {
        
        Map<String, Object> result = getMap();
        
        // 参数验证
        if (isEmpty(username) || isEmpty(password)) {
            result.put("success", false);
            result.put("message", "用户名或密码不能为空");
            return responseResult(result);
        }
        
        try {
            User user = userService.login(username, password);
            if (user != null) {
                // 设置Session
                request.getSession().setAttribute("user", user);
                result.put("success", true);
                result.put("message", "登录成功");
            } else {
                result.put("success", false);
                result.put("message", "用户名或密码错误");
            }
        } catch (Exception e) {
            logger.error("用户登录异常:", e);
            result.put("success", false);
            result.put("message", "系统异常,请稍后重试");
        }
        
        return responseResult(result);
    }
}

用户登录界面

2. 商品管理功能

商品管理模块支持多条件查询、分页展示和批量操作,后台管理界面提供完整的CRUD功能:

@Service
public class ItemServiceImpl implements ItemService {
    
    @Autowired
    private ItemMapper itemMapper;
    
    @Override
    @Transactional(readOnly = true)
    public PageInfo<Item> findItemsByCondition(Map<String, Object> params, 
                                             Integer pageNum, 
                                             Integer pageSize) {
        
        PageHelper.startPage(pageNum, pageSize);
        List<Item> items = itemMapper.selectByCondition(params);
        
        // 处理商品图片URL
        for (Item item : items) {
            processItemImages(item);
        }
        
        return new PageInfo<>(items);
    }
    
    @Override
    @Transactional
    public boolean addItem(Item item) {
        // 参数校验
        if (isEmpty(item.getName()) || isEmpty(item.getPrice())) {
            throw new BusinessException("商品名称和价格不能为空");
        }
        
        // 设置默认值
        if (item.getScNum() == null) item.setScNum(0);
        if (item.getGmNum() == null) item.setGmNum(0);
        if (item.getIsDelete() == null) item.setIsDelete(0);
        
        return itemMapper.insert(item) > 0;
    }
    
    private void processItemImages(Item item) {
        // 构建图片URL列表
        List<String> imageUrls = new ArrayList<>();
        if (!isEmpty(item.getUrl1())) imageUrls.add(item.getUrl1());
        if (!isEmpty(item.getUrl2())) imageUrls.add(item.getUrl2());
        if (!isEmpty(item.getUrl3())) imageUrls.add(item.getUrl3());
        if (!isEmpty(item.getUrl4())) imageUrls.add(item.getUrl4());
        if (!isEmpty(item.getUrl5())) imageUrls.add(item.getUrl5());
        
        item.setImageList(imageUrls);
    }
}

商品管理界面

3. 购物车业务逻辑

购物车模块实现了商品添加、数量修改、价格计算等核心功能,确保数据一致性:

@Service
public class CarServiceImpl implements CarService {
    
    @Autowired
    private CarMapper carMapper;
    
    @Autowired
    private ItemMapper itemMapper;
    
    @Override
    @Transactional
    public boolean addToCart(Integer userId, Integer itemId, Integer num) {
        // 验证商品存在且未删除
        Item item = itemMapper.selectByPrimaryKey(itemId);
        if (item == null || item.getIsDelete() == 1) {
            throw new BusinessException("商品不存在或已下架");
        }
        
        // 检查购物车是否已存在该商品
        Car existingCar = carMapper.selectByUserAndItem(userId, itemId);
        
        if (existingCar != null) {
            // 更新数量
            existingCar.setNum(existingCar.getNum() + num);
            existingCar.setTotal(calculateTotal(existingCar.getNum(), item.getPrice()));
            return carMapper.updateByPrimaryKey(existingCar) > 0;
        } else {
            // 新增购物车项
            Car car = new Car();
            car.setUserId(userId);
            car.setItemId(itemId);
            car.setNum(num);
            car.setPrice(new BigDecimal(item.getPrice()));
            car.setTotal(calculateTotal(num, item.getPrice()));
            
            return carMapper.insert(car) > 0;
        }
    }
    
    private String calculateTotal(Integer num, String price) {
        BigDecimal unitPrice = new BigDecimal(price);
        BigDecimal total = unitPrice.multiply(new BigDecimal(num));
        return total.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
    }
    
    @Override
    @Transactional(readOnly = true)
    public List<CarVO> getCartItems(Integer userId) {
        List<Car> cars = carMapper.selectByUserId(userId);
        List<CarVO> result = new ArrayList<>();
        
        for (Car car : cars) {
            CarVO vo = new CarVO();
            BeanUtils.copyProperties(car, vo);
            
            // 查询商品详细信息
            Item item = itemMapper.selectByPrimaryKey(car.getItemId());
            if (item != null && item.getIsDelete() == 0) {
                vo.setItemName(item.getName());
                vo.setItemImage(item.getUrl1());
                vo.setCurrentPrice(item.getPrice());
            }
            
            result.add(vo);
        }
        
        return result;
    }
}

购物车界面

4. 订单管理模块

订单处理涉及复杂的业务逻辑,包括库存校验、价格计算、状态流转等:

@Service
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderMapper orderMapper;
    
    @Autowired
    private OrderItemMapper orderItemMapper;
    
    @Autowired
    private ItemMapper itemMapper;
    
    @Override
    @Transactional
    public Order createOrder(OrderDTO orderDTO) {
        // 参数验证
        if (isEmpty(orderDTO.getUserId()) || isEmpty(orderDTO.getItems())) {
            throw new BusinessException("订单参数不完整");
        }
        
        // 创建订单主表
        Order order = new Order();
        order.setUserId(orderDTO.getUserId());
        order.setOrderNo(generateOrderNo());
        order.setStatus(0); // 待支付
        order.setTotalAmount(calculateOrderTotal(orderDTO.getItems()));
        order.setCreateTime(new Date());
        
        orderMapper.insert(order);
        
        // 创建订单明细
        for (OrderItemDTO itemDTO : orderDTO.getItems()) {
            Item item = itemMapper.selectByPrimaryKey(itemDTO.getItemId());
            if (item == null || item.getIsDelete() == 1) {
                throw new BusinessException("商品不存在或已下架");
            }
            
            if (item.getStock() < itemDTO.getQuantity()) {
                throw new BusinessException("商品库存不足");
            }
            
            OrderItem orderItem = new OrderItem();
            orderItem.setOrderId(order.getId());
            orderItem.setItemId(itemDTO.getItemId());
            orderItem.setQuantity(itemDTO.getQuantity());
            orderItem.setPrice(new BigDecimal(item.getPrice()));
            orderItem.setTotal(new BigDecimal(item.getPrice())
                .multiply(new BigDecimal(itemDTO.getQuantity())));
            
            orderItemMapper.insert(orderItem);
            
            // 扣减库存
            item.setStock(item.getStock() - itemDTO.getQuantity());
            itemMapper.updateByPrimaryKey(item);
        }
        
        return order;
    }
    
    private String generateOrderNo() {
        return "ORD" + System.currentTimeMillis() + 
               String.format("%04d", new Random().nextInt(10000));
    }
    
    private BigDecimal calculateOrderTotal(List<OrderItemDTO> items) {
        BigDecimal total = BigDecimal.ZERO;
        for (OrderItemDTO item : items) {
            Item product = itemMapper.selectByPrimaryKey(item.getItemId());
            BigDecimal itemTotal = new BigDecimal(product.getPrice())
                .multiply(new BigDecimal(item.getQuantity()));
            total = total.add(itemTotal);
        }
        return total;
    }
}

订单管理界面

实体模型设计

系统采用面向对象的设计思想,构建了完整的实体模型体系。核心实体类设计体现了业务领域的丰富语义:

// 商品实体类
public class Item implements Serializable {
    private Integer id;
    private String name;
    private String price;
    private Integer scNum;
    private Integer gmNum;
    private String url1;
    private String url2;
    private String url3;
    private String url4;
    private String url5;
    private String ms;
    private String pam1;
    private String pam2;
    private String pam3;
    private String val1;
    private String val2;
    private String val3;
    private Integer type;
    private Integer zk;
    private Integer categoryIdOne;
    private Integer categoryIdTwo;
    private Integer isDelete;
    
    //  transient字段,用于业务逻辑
    private transient List<String> imageList;
    private transient String categoryName;
    
    // getter和setter方法
    // 构造方法
}

// 购物车实体类
public class Car implements Serializable {
    private Integer id;
    private Integer itemId;
    private Integer userId;
    private Integer num;
    private BigDecimal price;
    private String total;
    
    // 关联商品信息
    private transient String itemName;
    private transient String itemImage;
    
    // getter和setter方法
}

功能展望与优化方向

1. 引入Redis缓存提升性能

实现思路:将热点数据如商品信息、用户会话、首页推荐等存入Redis,减少数据库访问压力。

@Service
public class ItemServiceWithCache implements ItemService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    private static final String ITEM_CACHE_KEY = "item:";
    private static final long CACHE_EXPIRE = 3600; // 1小时
    
    @Override
    public Item getItemById(Integer id) {
        String cacheKey = ITEM_CACHE_KEY + id;
        
        // 先从缓存获取
        Item item = (Item) redisTemplate.opsForValue().get(cacheKey);
        if (item != null) {
            return item;
        }
        
        // 缓存未命中,查询数据库
        item = itemMapper.selectByPrimaryKey(id);
        if (item != null) {
            // 写入缓存
            redisTemplate.opsForValue().set(cacheKey, item, CACHE_EXPIRE, TimeUnit.SECONDS);
        }
        
        return item;
    }
}

2. 消息队列实现异步处理

应用场景:订单创建后的库存扣减、邮件通知、日志记录等操作可以异步化处理。

3. 微服务架构改造

架构设计:将单体应用拆分为用户服务、商品服务、订单服务、支付服务等独立微服务,提升系统可扩展性和维护性。

4. 移动端适配与PWA支持

技术方案:开发响应式前端界面,支持PWA技术,实现类似原生应用的体验。

5. 智能推荐系统集成

算法实现:基于用户行为数据,使用协同过滤算法实现个性化商品推荐。

总结

该企业级电子产品销售管理平台通过严谨的架构设计和精细的技术实现,为电子产品零售商提供了完整的数字化解决方案。系统在数据库设计上体现了良好的扩展性和性能考虑,在业务逻辑实现上确保了数据一致性和用户体验。基于SSM框架的技术选型保证了系统的稳定性和可维护性,为后续的功能扩展和技术升级奠定了坚实基础。

未来通过引入缓存、消息队列、微服务等现代化技术手段,可以进一步提升系统的性能表现和业务承载能力,满足日益增长的业务需求。该平台的架构设计和实现方案为同类电子商务系统的开发提供了有价值的参考。

本文关键词
SSM框架电子产品销售平台源码解析数据库设计Spring MVC

上下篇

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