随着电子商务的蓬勃发展,传统烘焙行业面临着数字化转型的迫切需求。本文介绍的智能烘焙电商平台采用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='评价表'
该表设计具有以下技术亮点:
- 主键设计:采用UUIDv4作为主键,避免自增ID的安全风险和分库分表问题
- 字段优化:
content字段使用longtext类型,支持富文本评价内容 - 索引策略:通过
productId和time字段的复合索引优化商品评价查询性能 - 存储引擎:使用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='网站参数配置表'
此表采用单行配置模式,具有以下优势:
- 配置集中化:所有网站参数集中管理,便于维护和缓存
- 扩展性强:通过预留字段(
yu)和阈值(threshold)支持未来功能扩展 - 性能优化:单行设计减少数据库查询次数,适合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框架实现了完整的电商业务流程,数据库设计合理,代码结构清晰。系统在评价管理、订单处理、权限控制等核心功能上表现出色,为传统烘焙行业提供了可靠的数字化转型方案。未来通过引入缓存、微服务、消息队列等优化措施,可以进一步提升系统性能和可扩展性,满足更大规模的业务需求。