本文目录导读:
- 项目概览:TaskFlow(任务流)
- 第一阶段:后端基石 —— Spring Boot + MyBatis-Plus
- 第二阶段:前后端联调 —— Vue 3 + Axios + 权限控制
- 第三阶段:高级交互与优化 —— 完整闭环
- 学习路径总结图
- 避坑指南(针对三大框架)
这是一个非常好的学习思路,用一个完整的全栈项目来贯穿 Vue(前端框架)、Spring Boot(后端框架) 和 MyBatis/MyBatis-Plus(数据持久层框架) 的学习,效率远高于分开零散地学。
下面我将为你设计一个经典且功能完整的项目——“企业级员工任务管理系统 (TaskFlow)”,并详细拆解如何用这个项目串起三大框架的核心知识点。
项目概览:TaskFlow(任务流)
- 目标用户: 企业部门经理和员工。
- 核心功能:
- 用户登录/注册(含权限控制:管理员、普通用户)。
- 任务看板:创建、分配、更新任务状态(待办、进行中、已完成)。
- 任务详情与评论:点击任务查看详情,并进行多人评论。
- 数据统计:管理员看板,统计各部门任务完成率。
- 技术栈:
- 前端: Vue 3 + Vue Router + Pinia + Element Plus + Axios
- 后端: Spring Boot 2.7+ + Spring Security + JWT
- 数据库: MySQL
- ORM: MyBatis-Plus + MyBatis Generator(逆向工程)
- 开发工具: IDEA, VSCode, Postman
第一阶段:后端基石 —— Spring Boot + MyBatis-Plus
练习目标: 掌握项目初始化、分层架构、数据库交互和RESTful API设计。
核心步骤与知识点:
-
项目初始化:
- 使用
Spring Initializr创建项目,勾选依赖:Spring Web、MySQL Driver、MyBatis-Plus、Lombok、Spring Security。 - 知识点: Maven依赖管理、
application.yml配置数据源。
- 使用
-
数据库设计:
- 创建
user表(id, username, password, role, department, avatar)。 - 创建
task表(id, title, description, priority, status, assignee_id, create_time, update_time)。 - 创建
comment表(id, task_id, user_id, content, create_time)。 - 知识点: SQL建表、实体关系(一对多:一个用户有多个任务)。
- 创建
-
逆向工程 & 三层架构:
- 使用 MyBatis-Plus Generator 自动生成
Entity、Mapper、Service、Controller。 - 知识点:
@TableName、@TableId、IService接口通用CRUD、BaseMapper。
- 使用 MyBatis-Plus Generator 自动生成
-
核心API开发(User模块):
POST /api/user/login:接收用户名密码,校验后返回 JWT Token。GET /api/user/info:根据Token解析用户信息。- 知识点:
@RestController、@PostMapping、@GetMapping、@RequestBody、@RequestParam。
-
核心API开发(Task模块 - 体现MyBatis-Plus高级玩法):
- 分页查询:
GET /api/tasks?page=1&size=10&status=pending- 代码示例:
IPage<Task> page = taskService.page(new Page<>(page, size), queryWrapper); - 知识点:
Page分页插件配置、QueryWrapper条件构造器(eq、like、orderByDesc)。
- 代码示例:
- 复杂SQL(多表关联): 查询任务时,连表查出指派人的姓名和部门。
- 知识点:
@Results、@One注解进行关联查询,或自定义XML Mapper。
- 知识点:
- 事务处理: 创建任务时,同时更新用户的待办任务计数(演示事务)。
- 知识点:
@Transactional注解。
- 知识点:
- 分页查询:
第二阶段:前后端联调 —— Vue 3 + Axios + 权限控制
练习目标: 掌握Vue组件化开发、路由守卫、状态管理、API封装。
核心步骤与知识点:
-
前端项目搭建:
- 使用
Vite创建 Vue 3 项目。 - 安装依赖:
element-plus(UI库)、vue-router(路由)、pinia(状态管理)、axios(HTTP库)。 - 知识点:
npm包管理、vite.config.js配置跨域代理(开发环境)。
- 使用
-
登录模块(前后端握手):
- 创建
Login.vue页面。 - API封装: 在
src/utils/request.ts中封装 Axios 实例,设置baseURL和 请求拦截器(自动添加 Token)。 - 调用登录:
loginApi(username, password).then(res => { store.setToken(res.data.token) })。 - 知识点: 跨域问题、
axios拦截器、Token存储(sessionStorage)。
- 创建
-
路由守卫(权限控制的核心):
- 在
router/index.ts中配置routes:/login(公开)/dashboard(需要登录,管理员可见)/tasks(需要登录)
- 代码示例(路由守卫):
router.beforeEach((to, from, next) => { const token = useUserStore().token; if (to.path !== '/login' && !token) { next('/login'); } else if (to.path === '/dashboard' && userStore.role !== 'admin') { next('/tasks'); // 非管理员跳转任务页 } else { next(); } }); - 知识点: 导航守卫、权限判断逻辑。
- 在
-
任务看板(组件化 & 状态管理):
- 创建组件:
TaskList.vue(列表)、TaskCard.vue(单个卡片)、TaskFilter.vue(筛选)。 - 在父组件
TaskView.vue中使用 Pinia Store:// store/taskStore.ts export const useTaskStore = defineStore('task', { state: () => ({ tasks: [], currentPage: 1 }), actions: { async fetchTasks() { const res = await taskApi.getTasks(this.currentPage); this.tasks = res.data.records; } } }); - 知识点: 组件拆分 (
defineProps、emit)、Pinia的state/action/getter。
- 创建组件:
第三阶段:高级交互与优化 —— 完整闭环
练习目标: 完成一个完整业务流,处理复杂UI状态与后端交互。
核心步骤与知识点:
-
任务详情页(路由参数 & 嵌套组件):
- 点击任务卡片,跳转
/tasks/:taskId。 - 后端:
GET /api/task/{id}返回任务+评论列表。 - 前端:
route.params.taskId获取ID,使用onMounted生命周期钩子加载数据。 - 知识点: 动态路由、
v-for循环渲染评论、el-form提交新评论。
- 点击任务卡片,跳转
-
添加/编辑任务(表单验证 & 弹出框):
- 使用
Element Plus的Dialog组件。 - 表单代码:
<el-form :model="form" :rules="rules" ref="formRef"> <el-form-item label="标题" prop="title"> <el-input v-model="form.title" /> </el-form-item> <el-form-item label="指派人" prop="assigneeId"> <el-select v-model="form.assigneeId" placeholder="选择用户"> <el-option v-for="user in userList" :key="user.id" :label="user.name" :value="user.id" /> </el-select> </el-form-item> </el-form> - 知识点: 表单双向绑定 (
v-model)、验证规则 (validator)、el-select远程搜索。
- 使用
-
管理员统计看板(ECharts 集成 & 后端聚合查询):
- 后端: 使用 MyBatis-Plus 的
selectCount分组查询。// 统计各部门任务完成情况 @Select("SELECT d.department, COUNT(*) as count FROM task t LEFT JOIN user u ON t.assignee_id = u.id ...") List<Map<String, Object>> getDepartmentStats(); - 前端: 安装
vue-echarts,将后端返回的Map数据渲染成柱状图或饼图。 - 知识点: 后端复杂SQL聚合、前端图表库集成、
ref响应式数据更新图表。
- 后端: 使用 MyBatis-Plus 的
-
项目打包与部署(最终闭环):
- 前端:
npm run build生成dist文件夹。 - 后端:
mvn package生成jar包。 - 部署方式: 将
dist放入Spring Boot的resources/static目录下,部署成一个单一应用。 - 知识点: 生产环境跨域问题(Nginx反向代理配置)、Docker容器化部署(可选进阶)。
- 前端:
学习路径总结图
第一周:Spring Boot 后端 -> 搭建工程 -> MyBatis-Plus生成CRUD -> 写5个查询API -> 测试通过 第二周:Vue 3 前端 -> 搭建Vite项目 -> 配置Element Plus -> 写登录页 -> 动态路由 第三周:前后端联调 -> 用Axios调通登录 -> 实现任务列表增删改查 -> 展示评论 第四周:高级功能 & 优化 -> 集成ECharts统计 -> 添加权限控制 -> 写单元测试 -> 部署上线
避坑指南(针对三大框架)
- 不要过早陷入 MyBatis 的 XML 配置。 先用 MyBatis-Plus 的
QueryWrapper解决80%的查询,复杂查询再手写XML,这样学习曲线更平滑。 - 前端状态管理(Pinia)不要滥用。 只有多组件共享的数据(如用户信息、任务列表)才放 Store,单个页面的临时数据用
ref即可。 - 权限控制是核心考点。
- 前端的路由守卫只是体验上的保护,真正的安全在后端。
- 后端每个接口都需要校验 Token 和角色(用
@PreAuthorize注解)。 - 面试必问:“如果前端跳过了路由守卫,直接发送API请求,后端如何拦截?”——答案就是后端的Spring Security配置。
- 调试技巧。
- 前端:F12 Network 看请求参数、响应结果,Vue Devtools 跟踪状态变化。
- 后端:用好
@Slf4j打印 SQL 日志 (mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl)。 - 联调:用 Postman 先测后端API,确认无误后再开始前端联调,避免前后端互相怀疑。
通过这个 TaskFlow 项目,你不仅掌握了Vue、Spring Boot、MyBatis-Plus的独立用法,还完整经历了 数据流(后端-数据库-API-前端) 和 访问控制(JWT+路由守卫) 的全过程,这已经是一个具备工业级雏形的全栈项目了。