别人交作业凑技术点,你拿这个交,老师会觉得你是来答辩的
JavaEE 实践周的评分是「功能实现 35 分 + 数据库设计 20 分 + 界面/代码/拓展/答辩各 10 分 + 总结 5 分 + 特别加分 5 分」。
大多数同学的项目是这样的:
| 扣分项 | 别人的大作业 | 你的项目 |
|---|---|---|
| 权限控制 | 无,所有人能看所有页面 | 🟢 Sa-Token RBAC,管理员/服务员两套菜单 |
| 操作日志 | 无,谁改了数据不知道 | 🟢 AOP 自动记录每次增删改,完整审计 |
| 订单状态流转 | 简单 CRUD,无状态机 | 🟢 预订→入住→完成→取消,完整生命周期 |
| 数据库关联 | 单表操作 | 🟢 用户-角色-菜单多对多,订单-房间-客户一对多 |
| 演示数据 | 空数据库,评审时现录 | 🟢 一条 SQL 导入 15 客户 + 15 间房 + 38 条订单 |
| 代码注释 | 无 | 🟢 Controller/Service/Mapper 均有注释 |
| Thymeleaf | ❌ 完全没有(扣 5 分) | 🟡 依赖已集成到 pom.xml,补充模板即拿分 |
| 评分项(满分) | 本项目得分点 |
|---|---|
| 界面设计(10) | Element Plus 统一 UI,配色协调,表格/表单/弹窗风格一致 |
| 数据库设计(20) | 7 张业务表,含多对多关联(角色-菜单)、一对多(订单-房间)、外键约束 |
| 功能实现(35) | 10 个模块全部可增删改查,无报错,状态流转正确 |
| 代码质量(10) | Controller-Service-Mapper 三层清晰,AOP 日志解耦,异常统一处理 |
| 项目拓展(10) | Sa-Token RBAC + AOP 日志 + 订单状态机 + 动态路由 |
| 答辩(10) | 附答辩话术模板,7 个老师必问问题 + 满分回答 |
| 总结(5) | 格式规范、技术用语准确 |
| 额外加分(5) | 演示数据 + 两个角色切换 + 动态路由权限 |
📊 控制台 — 今日预入住/预退房/可用房间/本周收入统计卡片
+ 房间状态饼图(空闲/预订/入住/维修)
🏨 酒店管理
├── 📋 订单管理 — 全部/待入住/已入住/已完成/已取消 Tab 切换
│ 新增订单自动计算总价、自动标房间为"预订"
│ 确认入住 / 退房 / 收款 / 取消 / 续住
├── 🏠 房间管理 — 新增/编辑/删除/搜索,图片上传
│ 8 个城市覆盖:北京/上海/广州/深圳/杭州/成都/西安/三亚
└── 👥 客户管理 — 新增/编辑/删除/搜索,姓名/手机号查询
⚙️ 系统管理
├── 👤 用户管理 — 新增/编辑/删除/搜索/状态切换,角色筛选
├── 🛡️ 角色管理 — 角色定义 + 菜单权限树勾选
├── 📑 菜单管理 — 动态菜单 CRUD,图标/路径/排序
├── 📝 日志管理 — 操作日志查看/批量删除,记录操作人/IP/耗时
└── 📄 营业日报 — Thymeleaf 依赖已集成,补充模板即可拿技术拓展分
💰 财务统计 — 月度收入柱状图 + 周收入柱状图(ECharts)
| 技术 | 版本 | 作用 | 教学对标 |
|---|---|---|---|
| Spring Boot | 2.7.6 | 快速开发、自动配置、打包发布 | ✅ 考核要求 Spring Boot |
| Spring MVC | 随 Boot | @RestController + @RequestMapping,RESTful 接口 | ✅ 考核要求 Spring MVC |
| MyBatis-Plus | 3.5.2 | Lambda 查询、分页插件、自动填充 | ✅ 考核要求 MyBatis/Plus |
| Sa-Token | 1.34 | RBAC 权限认证、登录拦截、菜单权限 | 🔥 拓展加分 |
| AOP | — | @Around 环绕通知,自动记录操作日志 | 🔥 拓展加分 |
| Thymeleaf | 随 Boot | 模板引擎依赖已集成,预留营业日报扩展 | 🟡 补充即拿技术分 |
| Lombok | 1.18.30 | 简化 getter/setter/构造器 | 代码规范加分 |
| MySQL | 8.0 | 关系型数据库 | ✅ 考核要求 |
| 技术 | 版本 | 作用 |
|---|---|---|
| Vue | 3.x | 渐进式框架 |
| Vue Router | 4.x | 动态路由 + beforeEach 登录守卫 |
| Vuex | 4.x | 全局状态管理(token / 菜单 / 用户信息) |
| Element Plus | 2.2 | 表格/表单/弹窗/菜单/导航/图标 |
| Axios | 1.x | 统一请求封装,baseURL/超时/拦截器 |
| ECharts | 5.4 | 财务统计柱状图 |
| TypeScript | 4.5 | 类型安全 |
- JDK 17+
- Maven 3.8+
- MySQL 8.0
- Node.js 16+
-- 创建数据库
CREATE DATABASE IF NOT EXISTS homestay DEFAULT CHARSET utf8mb4;
USE homestay;
-- 一键导入所有数据(表结构 + 演示数据)
source demo_data.sql;这条 SQL 包含了 7 张表的建表语句 + 15 个客户 + 15 间房 + 38 条订单 + 2 个角色 + 系统用户 + 50 条操作日志。数据立刻可演示。
编辑 homestayback/src/main/resources/application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=你的MySQL密码cd homestayback
mvn spring-boot:run后端运行在 http://localhost:8091。
cd homestayfront
npm install
npm run serve前端运行在 http://localhost:8080,已通过 vue.config.js 配置代理到后端 8091 端口。
| 角色 | 账号 | 密码 | 能看到的菜单 |
|---|---|---|---|
| 超级管理员 | admin | 123456 | 全部功能 |
| 服务员 | worker | 123456 | 控制台 + 订单/房间/客户 |
两个角色看到的菜单不一样,这是 Sa-Token 动态路由 RBAC 的体现,答辩时切换演示。
用户前台预订 / 管理员手动建单
│
▼
[预订状态] ────取消────▶ [已取消]
│
确认入住
│
▼
[入住状态] ────退房────▶ [已完成]
│
续住(延长天数、重算金额)
| 操作 | 接口 | 触发条件 | 副作用 |
|---|---|---|---|
| 新增订单 | POST /h/order | 房间必须"空闲" | 房间自动变为"预订",总价=房价×天数 |
| 确认入住 | PUT /h/order | 订单状态为"预订" | 状态变为"入住" |
| 退房 | POST /h/order/checkout | 订单状态为"入住"且已支付 | 状态变为"完成",恢复房间为"空闲" |
| 取消 | DELETE /h/order/{id} | 订单状态为"预订" | 状态变为"取消",恢复房间"空闲" |
| 续住 | PUT /h/order/orderPlus | 订单状态为"入住" | 延长天数,重新计算金额,重置支付状态 |
| 收款 | POST /h/order/pay | — | 支付状态标记为"已支付" |
sys_user ──┐ h_order ──── h_room
│ │ │ │
│ sys_role_menu │ h_room_img
│ │ │
└── sys_role │
│ │
sys_menu h_user
关键关联:
sys_user ←── N:1 ──→ sys_role (用户属于一个角色)
sys_role ←── M:N ──→ sys_menu (角色拥有多个菜单,通过 sys_role_menu)
h_order ←── N:1 ──→ h_room (订单对应一个房间)
h_order ←── N:1 ──→ h_user (订单对应一个客户)
h_room ←── 1:N ──→ h_room_img (房间有多张图片)
SpringBoot-Vue-Homestay/
├── homestayback/ # Spring Boot 后端
│ └── src/main/java/com/homestay/homestay/
│ ├── config/ # 配置层
│ │ ├── aop/SysLogAspect.java # 🔥 AOP 环绕通知,自动记录操作日志
│ │ ├── satoken/ # Sa-Token 拦截器 + 权限实现
│ │ └── mybatis/ # MyBatis-Plus 分页/自动填充
│ ├── controller/ # 控制器层(HOrder/HRoom/HUser/Sys*)
│ ├── service/ # 业务逻辑层 + impl 实现
│ ├── mapper/ # MyBatis-Plus Mapper 接口
│ ├── entity/ # 实体类(@TableName/@TableId)
│ └── common/ # 统一返回 Res<T> + 全局异常 + CORS
├── homestayfront/ # Vue 3 前端
│ └── src/
│ ├── views/ # 页面组件(10 个 .vue)
│ │ ├── h/ # 酒店管理(订单/房间/客户)
│ │ └── sys/ # 系统管理(用户/角色/日志)
│ ├── layout/ # 布局(侧边栏/顶栏/标签页)
│ ├── router/ # 动态路由 + 登录守卫
│ ├── store/ # Vuex Token/菜单/用户
│ └── utils/request.ts # Axios 封装,Satoken 注入
├── demo_data.sql # 🔥 演示数据(开箱即用)
└── 答辩话术.txt # 💬 7 个老师必问问题 + 满分回答
⭐ Star 这个项目,答辩的时候被问到"你参考了哪些开源项目",你可以说"Star 过这个项目,在此基础上做了 XX 改进"——老师会觉得你有开源视野。
💬 项目根目录的
答辩话术.txt包含了 7 个老师最常问的问题和满分回答模板,答辩前看一遍。拿到优秀记得回来还愿。