基于SpringBoot的在线蛋糕销售商城系统 - 源码深度解析

JavaJavaScriptMavenHTMLCSSSSM框架ThymeleafMySQLSpringboot框架
2026-02-114 浏览

文章摘要

本项目是一个基于SpringBoot框架构建的专业在线蛋糕销售平台,旨在为烘焙商家提供一个功能完备、稳定可靠的电子商务解决方案。其核心业务价值在于彻底打通了蛋糕产品从线上展示、客户下单到后台订单处理的完整商业闭环,有效解决了传统实体蛋糕店客流量受限、营业时间固定以及手工管理订单效率低下等核心痛点。通...

随着电子商务的蓬勃发展,传统烘焙行业面临着数字化转型的迫切需求。本文介绍的智能烘焙电商平台采用SpringBoot框架构建,为蛋糕销售业务提供了完整的线上解决方案。该系统通过模块化设计和分层架构,实现了商品展示、购物车管理、订单处理、用户评价等核心功能,有效提升了烘焙企业的运营效率和客户体验。

系统架构与技术栈

该平台采用经典的三层架构设计,后端基于SpringBoot 2.x框架,前端使用Thymeleaf模板引擎结合Bootstrap组件库。数据持久层采用MyBatis-Plus框架,数据库使用MySQL 5.7+。系统通过内嵌Tomcat服务器运行,配置简洁,部署便捷。

核心配置文件展示了项目的基础设置:

server.port=8080
spring.thymeleaf.mode=LEGACYHTML5
spring.datasource.url=jdbc:mysql://192.168.99.4:3306/boot_dangaoshop?useUnicode=true&characterEncoding=utf8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml
mybatis-plus.type-aliases-package=com.it.entity

数据库设计亮点分析

评价表(gm_evaluate)设计

CREATE TABLE `gm_evaluate` (
  `id` varchar(36) NOT NULL COMMENT '主键ID',
  `userName` varchar(255) DEFAULT NULL COMMENT '用户名',
  `img` varchar(255) DEFAULT NULL COMMENT '评价图片',
  `productId` varchar(36) DEFAULT NULL COMMENT '商品ID',
  `content` longtext DEFAULT NULL COMMENT '评价内容',
  `score` varchar(255) DEFAULT NULL COMMENT '评分',
  `time` datetime DEFAULT NULL COMMENT '评价时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='评价表'

该表设计具有以下技术亮点:

  1. 主键设计:采用UUIDv4作为主键,避免自增ID的安全风险和分库分表问题
  2. 字段优化content字段使用longtext类型,支持富文本评价内容
  3. 索引策略:通过productIdtime字段的复合索引优化商品评价查询性能
  4. 存储引擎:使用InnoDB引擎,支持事务处理和行级锁定

网站参数配置表(gm_wbeparameter)设计

CREATE TABLE `gm_wbeparameter` (
  `id` varchar(36) NOT NULL COMMENT '主键ID',
  `logo` varchar(255) DEFAULT NULL COMMENT '网站logo',
  `hotNumber` int(11) DEFAULT NULL COMMENT '热门商品数量',
  `newNumber` int(11) DEFAULT NULL COMMENT '新品数量',
  `recommendOne` varchar(255) DEFAULT NULL COMMENT '推荐商品一',
  `recommendTwo` varchar(255) DEFAULT NULL COMMENT '推荐商品二',
  `recommendThree` varchar(255) DEFAULT NULL COMMENT '推荐商品三',
  `bottomImg` varchar(255) DEFAULT NULL COMMENT '底部图片',
  `iphone` varchar(255) DEFAULT NULL COMMENT '联系电话',
  `aboutWe` longtext DEFAULT NULL COMMENT '关于我们',
  `backgroundImg` varchar(255) DEFAULT NULL COMMENT '背景图片',
  `name` varchar(255) DEFAULT NULL COMMENT '网站名称',
  `year` varchar(255) DEFAULT NULL COMMENT '年份',
  `copyright` varchar(255) DEFAULT NULL COMMENT '版权信息',
  `threshold` varchar(255) DEFAULT '' COMMENT '阈值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='网站参数配置表'

此表采用单行配置模式,具有以下优势:

  1. 配置集中化:所有网站参数集中管理,便于维护和缓存
  2. 扩展性强:通过预留字段(yu)和阈值(threshold)支持未来功能扩展
  3. 性能优化:单行设计减少数据库查询次数,适合Redis缓存

核心功能实现

收货地址管理功能

系统提供完整的收货地址CRUD操作,支持默认地址设置和批量管理。地址控制器采用RESTful风格设计:

@Controller
@RequestMapping("/address")
public class AddressController {
    @Autowired
    private AddressService addressService;
    @Autowired
    private ItdragonUtils itdragonUtils;

    @ResponseBody
    @GetMapping("addressTable.do")
    public TableResultResponse classifyTable(Address address, int page, int limit) {
        List<Map<String, Object>> infoList = new ArrayList<>();
        address.setUserId(itdragonUtils.getSessionUser().getId());
        Page<Address> pageInfo = addressService.selectPage(address, page, limit);
        
        for (Address record : pageInfo.getRecords()) {
            Map<String, Object> resultMap = new HashMap<>(16);
            resultMap.put("id", record.getId());
            resultMap.put("address", record.getCityPicker() + record.getDetailAddress());
            resultMap.put("tel", record.getPhone());
            resultMap.put("username", record.getConsignee());
            resultMap.put("default", record.getIsDefault());
            infoList.add(resultMap);
        }
        return Result.tableResule(pageInfo.getTotal(), infoList);
    }
}

地址管理界面

订单处理流程

订单生成模块采用事务管理确保数据一致性,支持库存校验和价格计算:

@Service
@Transactional
public class OrderService {
    
    public ResultResponse createOrder(OrderDTO orderDTO) {
        // 1. 验证商品库存
        for (OrderItem item : orderDTO.getItems()) {
            Product product = productMapper.selectById(item.getProductId());
            if (product.getStock() < item.getQuantity()) {
                throw new BusinessException("商品库存不足");
            }
        }
        
        // 2. 生成订单号
        String orderNo = generateOrderNo();
        
        // 3. 计算总金额
        BigDecimal totalAmount = calculateTotalAmount(orderDTO.getItems());
        
        // 4. 保存订单主表
        Order order = buildOrder(orderDTO, orderNo, totalAmount);
        orderMapper.insert(order);
        
        // 5. 保存订单明细
        saveOrderItems(order.getId(), orderDTO.getItems());
        
        // 6. 扣减库存
        updateProductStock(orderDTO.getItems());
        
        return Result.resuleSuccess(orderNo);
    }
}

订单管理界面

商品评价系统

评价功能支持图片上传和评分机制,采用异步处理提升用户体验:

@RestController
@RequestMapping("/evaluate")
public class EvaluateController {
    
    @PostMapping("/add")
    public ResultResponse addEvaluate(@RequestBody EvaluateDTO evaluateDTO) {
        // 异步处理图片上传
        CompletableFuture<String> imgFuture = CompletableFuture.supplyAsync(() -> {
            return imageService.upload(evaluateDTO.getImages());
        });
        
        // 保存评价信息
        Evaluate evaluate = new Evaluate();
        evaluate.setId(UUID.randomUUID().toString());
        evaluate.setUserId(SecurityUtils.getCurrentUserId());
        evaluate.setProductId(evaluateDTO.getProductId());
        evaluate.setContent(evaluateDTO.getContent());
        evaluate.setScore(evaluateDTO.getScore());
        evaluate.setTime(new Date());
        
        try {
            evaluate.setImg(imgFuture.get(5, TimeUnit.SECONDS));
        } catch (Exception e) {
            log.error("图片上传超时", e);
        }
        
        evaluateMapper.insert(evaluate);
        return Result.resuleSuccess();
    }
}

商品评价界面

权限管理系统

基于Spring Security实现角色权限控制,支持动态权限配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/dashboard")
            .and()
            .logout()
            .logoutSuccessUrl("/login");
    }
}

用户管理界面

实体模型设计

系统采用贫血模型设计,实体类通过Lombok注解简化代码:

@Data
@TableName("gm_address")
public class Address implements Serializable {
    @TableId(value = "id", type = IdType.UUID)
    private String id;
    private String userId;
    private String cityPicker;
    private String detailAddress;
    private String consignee;
    private String phone;
    private String isDefault;
}

MyBatis-Plus配置优化了数据库操作:

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

功能展望与优化

1. 缓存层优化

引入Redis作为二级缓存,提升系统性能:

@Configuration
@EnableCaching
public class RedisConfig {
    
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

@Service
public class ProductService {
    
    @Cacheable(value = "products", key = "#productId")
    public Product getProductById(String productId) {
        return productMapper.selectById(productId);
    }
}

2. 微服务架构改造

将单体应用拆分为商品服务、订单服务、用户服务等微服务:

  • 商品服务:负责商品管理、库存管理
  • 订单服务:处理订单生成、状态跟踪
  • 用户服务:管理用户信息、权限控制
  • 网关服务:统一入口、负载均衡

3. 消息队列集成

使用RabbitMQ处理异步任务:

@Configuration
public class RabbitMQConfig {
    
    @Bean
    public Queue orderQueue() {
        return new Queue("order.queue", true);
    }
    
    @Bean
    public Queue emailQueue() {
        return new Queue("email.queue", true);
    }
}

@Service
public class OrderService {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void createOrder(OrderDTO orderDTO) {
        // 发送订单消息到队列
        rabbitTemplate.convertAndSend("order.queue", orderDTO);
    }
}

4. 移动端适配

开发React Native移动应用,提供更好的移动购物体验:

  • 响应式设计适配不同屏幕尺寸
  • PWA技术支持离线访问
  • 推送通知提升用户 engagement

5. 数据分析平台

集成ELK栈实现业务数据分析:

  • Elasticsearch:商品搜索和日志分析
  • Logstash:日志收集和处理
  • Kibana:数据可视化展示
  • 基于用户行为数据的个性化推荐

总结

该智能烘焙电商平台通过SpringBoot框架实现了完整的电商业务流程,数据库设计合理,代码结构清晰。系统在评价管理、订单处理、权限控制等核心功能上表现出色,为传统烘焙行业提供了可靠的数字化转型方案。未来通过引入缓存、微服务、消息队列等优化措施,可以进一步提升系统性能和可扩展性,满足更大规模的业务需求。

本文关键词
SpringBoot在线蛋糕销售商城系统源码解析数据库设计

上下篇

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