1. 项目背景与核心需求
校园小卖铺管理系统作为计算机专业毕业设计的常见选题,本质上是一个典型的B/S架构零售业务系统。这个选题之所以在毕业设计中广受欢迎,主要源于以下几个特点:
- 业务场景熟悉度高:每个学生都接触过校园小卖铺的购物场景,需求理解成本低
- 技术栈覆盖面广:涉及前后端开发、数据库设计、支付对接等完整开发流程
- 复杂度适中:既包含基础CRUD操作,又可扩展会员体系、库存预警等进阶功能
从技术选型来看,采用SpringBoot框架具有明显优势:
- 内嵌Tomcat简化部署
- 自动配置减少XML配置
- 丰富的Starter依赖快速集成MyBatis、Redis等组件
- 完善的文档和社区支持
2. 系统架构设计
2.1 技术栈选型
基础框架组合:
- 后端:SpringBoot 2.7.x + MyBatis-Plus 3.5.x
- 前端:Thymeleaf + Bootstrap(适合毕业设计展示)
- 数据库:MySQL 8.0(校园场景数据量不大)
- 缓存:Redis 6.x(可选,用于热点数据缓存)
提示:毕业设计项目建议使用稳定版本而非最新版,避免兼容性问题影响答辩演示。
2.2 分层架构设计
典型的三层架构实现:
code复制com.campus.store
├── config # 配置类
├── controller # 控制层
├── service # 业务层
│ ├── impl # 实现类
├── dao # 数据访问层
├── entity # 实体类
├── dto # 数据传输对象
├── util # 工具类
└── exception # 异常处理
2.3 数据库设计关键表
核心表结构示例(MySQL):
sql复制CREATE TABLE `product` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '商品名称',
`category_id` int DEFAULT NULL COMMENT '分类ID',
`price` decimal(10,2) NOT NULL COMMENT '售价',
`stock` int NOT NULL DEFAULT '0' COMMENT '库存',
`status` tinyint DEFAULT '1' COMMENT '状态(1上架 0下架)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `order` (
`id` varchar(32) NOT NULL COMMENT '订单号',
`user_id` bigint NOT NULL,
`total_amount` decimal(10,2) NOT NULL COMMENT '订单总额',
`payment_status` tinyint DEFAULT '0' COMMENT '支付状态',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 核心功能实现
3.1 商品管理模块
关键实现要点:
- 多条件分页查询:使用MyBatis-Plus的LambdaQueryWrapper构建动态查询
- 库存扣减:采用乐观锁避免超卖
java复制@Transactional
public boolean reduceStock(Long productId, Integer quantity) {
Product product = productMapper.selectById(productId);
if(product.getStock() < quantity){
throw new BusinessException("库存不足");
}
int rows = productMapper.updateStock(productId, quantity, product.getVersion());
return rows > 0;
}
3.2 订单支付流程
典型支付状态机设计:
code复制待支付 --(支付成功)--> 已支付
待支付 --(超时未支付)--> 已取消
已支付 --(发货)--> 待收货
待收货 --(确认收货)--> 已完成
3.3 权限控制方案
基于Spring Security的RBAC实现:
java复制@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")
.anyRequest().permitAll()
.and()
.formLogin();
}
}
4. 毕业设计特色功能实现
4.1 数据可视化看板
使用ECharts实现销售数据可视化:
- 后端提供统计接口
java复制@GetMapping("/stats/sales")
public Result salesTrend(@RequestParam String period) {
// 查询近7天/30天销售数据
return Result.success(statService.getSalesTrend(period));
}
- 前端通过AJAX获取数据渲染图表
4.2 微信小程序端对接
扩展方案:
- 新增小程序专属API接口
- 使用WxJava SDK处理微信支付
- 配置跨域支持:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("*")
.allowedMethods("*");
}
}
4.3 库存预警功能
定时任务检查库存:
java复制@Scheduled(cron = "0 0 9 * * ?") // 每天9点执行
public void checkLowStock() {
List<Product> lowStockProducts = productService.listLowStockProducts();
if(!lowStockProducts.isEmpty()){
// 发送邮件/短信通知
alertService.sendStockAlert(lowStockProducts);
}
}
5. 项目部署与演示准备
5.1 本地开发环境配置
-
必备工具:
- JDK 1.8+
- Maven 3.6+
- MySQL 8.0
- Redis(可选)
- IDEA/Eclipse
-
初始化步骤:
bash复制git clone https://github.com/xxx/campus-store.git
mvn clean install
# 导入sql脚本
mysql -u root -p < db_init.sql
5.2 生产环境部署
宝塔面板部署方案:
- 打包可执行jar:
bash复制mvn package -DskipTests
- 配置Nginx反向代理:
nginx复制server {
listen 80;
server_name store.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
5.3 答辩演示技巧
-
演示重点排序:
- 核心业务流程(登录→选购→支付)
- 特色功能展示(数据看板、预警通知)
- 技术难点解决方案
-
常见问题准备:
- 如何防止重复下单?
- 库存超卖如何处理?
- 系统有哪些扩展性考虑?
6. 开发经验与避坑指南
6.1 MyBatis-Plus使用陷阱
- 逻辑删除配置:
yaml复制mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除字段
logic-delete-value: 1 # 删除值
logic-not-delete-value: 0 # 未删除值
- 字段自动填充:
java复制@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
6.2 事务管理注意事项
- 避免大事务:
java复制// 反例:包含远程调用的事务
@Transactional
public void createOrder(OrderDTO dto) {
// 本地数据库操作
orderMapper.insert(order);
// 远程支付调用(可能导致长事务)
paymentService.pay(order);
}
- 正确设置隔离级别:
java复制@Transactional(isolation = Isolation.READ_COMMITTED)
public void updateProduct(Product product) {
// ...
}
6.3 性能优化实践
-
接口响应优化:
- 启用MyBatis二级缓存
- 添加@Cacheable注解缓存热点数据
- 使用DTO避免返回完整Entity
-
批量操作示例:
java复制// 批量插入
List<Product> products = ...;
productService.saveBatch(products, 100); // 每批100条
在完成这个项目的过程中,最大的收获是对业务与技术匹配度的理解。校园小卖铺虽然业务简单,但通过合理的架构设计和细节打磨,完全可以做出答辩亮点。建议学弟学妹们在开发时,不要只满足于功能实现,要多思考"如果真实运营,这个设计能否支撑"的问题,这样的毕业设计才会更有价值。
