1. 选题与总体设计先想清楚论文要回答什么问题1.1 为什么停车场管理系统适合做毕设我见过太多毕设项目界面做得花里胡哨答辩的时候却被老师问得哑口无言。停车场管理系统是少有的几个“看着简单、实则五脏俱全”的题目它涉及用户登录、车位状态管理、车辆进出登记、计费规则、月度卡、数据统计、前端可视化几乎覆盖了你毕业论文里必须涉及的全部章节——需求分析、系统设计、数据库设计、系统实现、系统测试。你要是把 springbootvue 这个组合用在这个题目上技术栈不算冷门工程量又可控一个学期做出完整成果完全可行。更重要的是这个选题有一个天然优势业务逻辑是看得见摸得着的。你不需要编造“智能推荐算法”“大数据分析平台”这种自己都讲不清楚的噱头停车场怎么进车、怎么出场、怎么算钱每个人生活里都见过。答辩时老师问你“为什么这样设计”你至少能讲明白真实场景里的来龙去脉。写论文也不容易飘整个系统从头到尾有一条完整的业务链车位空闲→车辆入场→车位占用→计费计时→车辆出场→释放车位→生成订单。这条链路理清楚了论文的骨架也就立住了。1.2 需求拆解先画业务闭环再谈功能列表很多同学拿到题目就直接开写代码这是个非常危险的开始。动工之前建议你先拿一张纸把系统的使用者摆出来然后挨个追问他们要做什么。停车场管理系统最常见的角色是管理员如果你要扩展还可以加一个“用户/车主”角色。管理员关注的是车位实时状态、车辆进出记录、收费统计车主关注的是月卡续费、停车记录查询。角色一旦确定模块边界就出来了。我建议第一版先做单角色管理员版把核心闭环跑通管理员登录后能看到当前所有车位是空闲还是占用可以手动登记车辆入场和出场系统根据入场时间和出场时间自动计算停车费同时产生一条停车订单。在此基础上再加车位管理、车辆管理、订单查询、月卡管理、统计报表。这个过程就叫需求分析论文里的“功能需求”和“用例图”都从这张业务闭环图上变出来。不要一开始就惦记着实现微信小程序、短信通知、摄像头车牌识别那些都是加分项不是必选项。必选项是让车辆“进得来、停得下、出得去、算得清”。1.3 前后端分离架构与工程目录规划技术架构不需要多复杂一辆车从进门到出门数据流的路径是前端页面把车辆信息提交给 Spring Boot 后端接口后端调用 Service 层处理业务Service 层通过 MyBatis-Plus 操作 MySQL 数据库处理结果再逐层返回给前端 Vue 组件渲染。你论文里的“系统总体架构图”画成这个层次就够了不用画得跟微服务架构一样花哨。工程目录方面前端和后端我建议分开建两个目录不用放到同一个仓库里追求“一键启动”。后端按 Controller、Service、Mapper、Entity、Common 这样分层Controller 只做参数接收和结果返回Service 写业务逻辑Mapper 做数据访问前端按照 views、router、api、components、store 来组织。这样分层的好处是你写论文的“系统设计”那一章时几乎可以照着目录结构直接描述每个包承担什么职责逻辑非常顺。更重要的是答辩老师如果打开你的代码看第一反应是“这孩子有工程意识”。2. 技术选型背后的逻辑Spring Boot Vue 为什么是主流答案2.1 为什么 Spring Boot 比 SSM 更适合毕设SSMSpringSpringMVCMyBatis是十年前的经典组合现在你还能搜到大量相关教程源码但我不建议你选它作为毕设技术栈。Spring Boot 本质上就是把 Spring 家族的整合成本压了下来它通过自动配置和起步依赖把“写一堆 XML 配置才能跑起来”的旧痛解决了。你只需要引入 spring-boot-starter-web加上注解就能启动一个 Web 服务。这种“约定大于配置”的思想也正是你论文里可以展开阐述的技术亮点。另外从就业角度讲现在中小型公司招聘 Java 后端简历上写“熟悉 Spring Boot”几乎是默认门槛。你花几个月做完这个毕设学的不是一堆过时写法而是整个后端开发的基础工作流。别小看这一点很多毕设项目做完就扔了但 Spring Boot 的技能在你实习、工作、做个人项目时都能复用。你论文的技术选型章节里可以顺理成章地写Spring Boot 降低配置复杂度、生态成熟、适合敏捷开发。所有这些话都是你实际代码里能验证的不是空话。2.2 Spring Boot 版本选择别一上来就追新这里我必须先泼一盆冷水Spring Boot 版本太高是今年我见过最多人卡住的问题。Spring Boot 3.x 全面依赖 JDK 17而且把很多包名从 javax 改成了 jakarta网上大量教程和现成代码都是基于 2.x 写的。你要是照着 3.x 环境去跑 2.x 的代码光是 import 报错就能磨掉你一周。所以我给你一个明确建议除非导师指定否则用 Spring Boot 2.7.x JDK 8 或 JDK 11这个组合在 2026 年依然非常稳教程多、报错少、环境要求低。你可以在论文里写一句“本系统采用 Spring Boot 2.7 框架基于 JDK 11 构建利用其自动配置机制快速搭建项目骨架”这完全够用。答辩时如果被问到为什么不用 3.x你也不能慌答“3.x 引入 Jakarta 命名空间并需要 JDK17考虑到开发环境的兼容性与团队技术栈现状2.7 是当时最稳定的长期支持版本”这个回答非常专业。2.3 持久层选型MyBatis-Plus 的开发效率逻辑持久层选 MyBatis-Plus 的理由特别简单开发效率比原生 MyBatis 高代码量比 JPA 看着亲切。MyBatis-Plus 提供了单表 CRUD 的现成方法你写一个userMapper.selectById(id)不用手写 SQL 就把数据查出来了代码还比 JPA 更接近 Java 工程师的语言习惯。对于停车场这类以单表操作为主的系统它的优势非常明显。做分页的时候MyBatis-Plus 也只要在配置类里注册一个分页插件然后调用page方法就行前端传页码和每页条数后端返回总记录数、总页数、当前页数据这一套是管理类系统的标配逻辑。论文里如果展开讲你可以写MyBatis-Plus 在实体类基础上提供条件构造器避免了大量 XML 映射文件提升了开发效率。这种写法有代码支撑不是唱赞歌。2.4 前端框架选择Vue 2、Vue 3 与 UI 库的取舍前端选 Vue 是稳的因为它的学习曲线比 React 平缓模板语法接近 HTML状态管理有现成的 Pinia/Vuex路由用 Vue Router特别适合毕设这种“一个人全栈搞定”的场景。至于选 Vue 2 还是 Vue 3我的看法是如果你时间紧、想照着一套完整教程敲选 Vue 2 Element UI资料铺天盖地如果你愿意多花一两周熟悉 Vite 和新语法用 Vue 3 Vite Element Plus答辩时能加点印象分。这里要特别强调一个点不要因为网上说“Vue 3 是新趋势”就盲目选结果遇到兼容问题自己又解决不了。毕设的第一目标是保质保量完成不是追新。我自己踩过这个坑Vue 2 的写法迁移到 Vue 3 后很多全局注册和生命周期钩子完全变了查资料的时间比写代码的时间还长。先评估自己的底子再决定版本这个顺序不能反。3. 数据库设计与业务规则实现3.1 表结构怎么设计才不会被答辩老师怼停车场核心表其实没几张管理员用户表、车位表、车辆表、停车记录表、收费规则表、月卡表。我见过很多同学在数据库设计时堆了十几张表结果业务逻辑根本撑不起来老师一问就露怯。表数量不追求多追求的是每一张表都有清晰职责表之间关系能自圆其说。车位表parking_space至少要有车位编号、区域、类型普通/充电/残疾人、状态。状态字段我用 int 表示0 空闲1 占用2 维修这样前端渲染颜色块和文字都方便。停车记录表parking_record是全局核心表字段要记录车牌号、入场时间、出场时间、停车时长、应收金额、实收金额、关联车位ID、订单状态。这里要注意车牌号字段不能只存一个字符串就完事还要加上索引因为后续统计和搜索都靠它。月卡表则围绕“有效时长”设计车牌号、月卡类型、开始时间、结束时间、状态。月卡车辆出场时不按单次时长计算而是校验是否在有效期内这个逻辑要在代码里和临时车分开处理。所有表都加上create_time、update_time两个公共字段MyBatis-Plus 可以自动填充也能让答辩老师看到你注意了审计字段是个小加分项。3.2 状态流转与订单生命周期停车业务里最重要的状态不是某个实体字段而是“车位状态”和“订单状态”的联动。当一辆车入场系统把车位从空闲改成占用并创建一条停车记录车辆出场系统根据收费规则算钱把订单状态从“进行中”改成“已完成”车位从占用改回空闲。如果中间出现了异常比如车辆在系统中没有入场记录就出场还需要有异常处理逻辑。建议你在设计阶段就画一个状态流转图虽然博文里不能放图但你自己写论文时一定要把这个图画出来。车位有“空闲、占用、维修”三个状态订单有“进行中、已完成、已取消、异常”四个状态。状态之间的转换不是随便跳的入场操作只能发生在空闲车位出场操作只能作用于进行中的订单。代码层面我建议用 if 判断加枚举来约束这种流转不要在数据库里用触发器因为触发器对毕设来说太复杂调试也麻烦。3.3 停车费计费规则从需求到代码计费规则是停车场系统最容易在答辩时被追问的部分。咱们尽量先做一套简单但完整的规则临时车免费停车15分钟超过15分钟后按小时收费每小时5元不足一小时按一小时计费单日收费上限30元。月卡车辆不按此规则。第一步是计算停车时长用ChronoUnit.MINUTES.between(entryTime, exitTime)得到精确分钟数。判断是否在免费时长内如果超过则计算收费小时数int hours (int) Math.ceil(minutes / 60.0);。这里踩坑极多如果你用整数除法除以 60 会把分钟直接抹掉61 分钟会变成 1 小时但实际应该按 2 小时收。只有把分钟转成 double 再除以 60然后用 Math.ceil 向上取整才符合“不足一小时按一小时”的规则。金额计算要特别记得用 BigDecimal不能用 double。5.5 元这类金额用 double 算容易产生 0.0000001 的误差论文测试里不会被发现但业务上是不允许的。代码示例BigDecimal hours BigDecimal.valueOf(Math.ceil(minutes / 60.0)); BigDecimal total hours.multiply(unitPrice); if (total.compareTo(dailyCap) 0) { total dailyCap; }这段代码就是“计费模块”的核心你论文里把这段逻辑讲透比贴几十行 Controller 有用得多。3.4 车辆进场、出场的核心接口设计后端接口设计的核心是两条链入场链路和出场链路。进场时前端传车牌号和车位编号后端先校验车牌号是否在数据库里有停着的记录避免重复入场再校验车位状态只有空闲车位才能被占用最后更新车位状态、创建停车记录。出场时前端传车牌号或订单号后端查出进行中的记录计算时长和费用更新订单状态和车位状态。接口的返回格式要统一。你可以设计一个ResultT类泛型里放数据外层包 code、message、data 三个字段。code 用 200 表示成功500 表示系统异常401 表示未登录。这样做的好处是前端 axios 拦截器只需要判断 code 就能统一处理错误状态不用每个接口单独写 try-catch。答辩时你还能说“我实现了统一数据返回格式提高了前后端联调效率”这是非常标准且真实的表述。事务边界同样不能漏。入场操作涉及“更新车位 插入订单记录”必须用Transactional保证两个操作同时成功或同时失败。否则会出现车位状态改了但订单没插入或者订单插入了但车位还是占用的脏数据。这一句话就能让老师觉得你考虑过数据一致性问题。4. 后端实操从零配置到关键代码实现4.1 IDEA 启动配置与端口修改很多人的第一个坑出在启动方式上Spring Boot 项目配置了服务器端口8080但另一个服务也占用了 8080导致启动失败。修改端口的地方在application.ymlserver: port: 8080如果用的是 IDEA 新版修改 Run Configuration 里的 Environment variables 或者直接改配置文件即可。这里我不建议你用新建application-dev.yml的方式对毕设来说一套配置就够文件多了反而容易改错。IDEA 里直接运行main方法看到Started Application in 2.3 seconds就说明启动成功。另外前后端分离开发时前端开发服务器通常跑在 5173Vite 默认后端跑在 8080两者端口不同必然产生跨域。所以后端要配置跨域过滤器允许前端地址访问。一个最简单的 CorsConfig 类加上即可。等你后面把前端打包后放进 Spring Boot 的static目录同一个端口就没有跨域问题了这个我们后面专门展开说。4.2 统一返回体与全局异常处理统一返回体不只是格式问题而是服务端设计规范。你可以定义一个通用类放在common包public class ResultT { private Integer code; private String message; private T data; // 省略构造方法和 getter/setter }然后写一个GlobalExceptionHandler用RestControllerAdvice捕获异常把非法参数、业务异常、系统异常分别映射到不同 message 返回给前端。这样做的好处非常实际你写测试用例的时候能断言返回的 code 是不是 200能断言业务异常时的 message 是不是清晰不用去猜接口是不是报 500。很多同学忽略这部分结果前后端联调时后端一报错前端页面直接白屏或弹出英文异常信息非常掉价。配置好全局异常处理后出错误时前端能优雅地弹出“车辆已存在”而不是让人看不懂的堆栈信息。4.3 登录鉴权用最简单的方式解释 JWT停车场管理系统肯定有管理员登录最简方案是把用户信息存在 Session 里服务端通过 Cookie 识别会话。但如果你想在论文里有点含金量我建议用 JWT 做无状态鉴权。登录成功后后端把用户 ID、用户名、角色放进 token返回给前端前端存在 localStorage前端发起请求时在请求头里带上 token后端用拦截器解析 token顺便把当前用户信息存到 ThreadLocal。JWT 的代码实现其实没有想象中复杂只需要引入一个jjwt依赖写一个生成 token 和解析 token 的工具类。拦截器注册的时候把登录接口和静态资源排除掉其他接口一律校验 token。答辩时被问“怎么防止未登录访问系统”你就能顺理成章地讲通过自定义拦截器统一校验请求头中的 JWT 信息校验不通过直接返回 401。如果你觉得手写 JWT 还是太费劲可以用 Sa-Token 框架它把登录、鉴权、踢人下线都封装好了对毕设来说文档非常友好。但你要在论文里多写一点框架说明不然答辩老师会追问原理。我的建议是时间充足就手写 JWT时间不够就用 Sa-Token前者胜在积累后者胜在稳定。4.4 分页查询与搜索前端表格的后端支撑停车订单列表、车辆列表、用户列表三个典型页面都需要分页。Spring Boot 后端接收current和size参数返回分页结果。你只用 MyBatis-Plus 的 LambdaQueryWrapper 组装查询条件然后调用page方法整个分页过程不超过十行代码。车牌号模糊查询用like时间范围查询用ge和le这三个条件拼起来就是“订单列表页”的核心接口。这里我提一个具体优化分页接口返回的字段不要全部原样返回比如停车记录表里的创建时间、更新时间、金额这些字段前端并不都需要。你可以直接在实体类上用JsonIgnore或者建 VO 对象来裁剪字段。虽然毕设不求性能极致但这个习惯会让你的代码更像真实项目答辩老师也能看得舒服。4.5 文件上传本地存储还是 MinIO很多同学想给车位加“车位照片”给车辆加“入场抓拍图”于是问要不要把 MinIO 加到 Spring Boot。我的回答是先分清需求如果图片数量少访问量低直接本地目录存储就够了。定义一个上传接口接收 MultipartFile把文件写到本地的upload/目录然后把访问 URL 拼给前端。注意本地路径不能乱放要放在项目外部目录或者可配置目录不然打包后路径会失效。只有当你要做“多机部署、图片量大、需要对象存储”的时候才引入 MinIO。MinIO 在论文里确实是个亮点操作也简单引入依赖配置连接地址、AccessKey、Bucket 名称上传时直接用 client 的putObject方法。但你要清楚答辩老师很可能问“为什么不用本地存储”你要能答出“对象存储便于备份扩容且与业务服务器解耦”。如果答不上来宁可不加这个功能。毕设的加分项不该成为减分项。5. 前端 Vue 实现与部署别让界面拖后腿5.1 Vue 项目初始化与目录组织前端初始化方式取决于你选 Vue 2 还是 Vue 3。Vue 3 用 Vite指令是npm create vitelatest然后选择 Vue 模板Vue 2 一般用 Vue CLI安装稍慢但胜在旧教程多。项目创建后第一件事是安装依赖npm install。这个概念是很多新手第一次接触 Node.js 生态时的困惑点你只要理解成“npm 通过 package.json 记录依赖然后从网上下载到本地 node_modules 目录”就行。目录规划我推荐这样src/api存放所有请求后端接口的方法src/router路由配置src/store状态管理存放用户 token 和用户信息src/views页面组件src/components公共组件很多零基础同学会把所有代码堆在 App.vue 里这是一个很不好的习惯。你既然选了前后端分离前端也要讲究分层。规范一点写论文时“前端模块设计”这一节才有着落。5.2 路由设计动态路由是否必要Vue 前端页面至少要有登录页、仪表盘、车位管理、停车订单、车辆管理、月卡管理、统计报表这几个路由。路由配置里要做一道登录守卫没有 token 时强制跳转到登录页有 token 时允许访问其他页面。动态路由要不要做我建议别做。动态路由通常是根据用户角色从后端拉菜单数据再router.addRoute动态添加但停车场系统的角色只有一个管理员动态路由完全没意义。你要是为了论文硬加这个功能反而会被追问“不同角色访问权限如何控制”。静态路由配合登录守卫已经能说明你对路由权限有理解何必给自己挖坑。刷新页面时 Vue 应用会重新初始化路由如果你用的是 history 模式后端没有相应配置会导致刷新 404。这个坑我们留到第七节细说但你现在就要知道路由模式选 history 还是 hash不只是偏好问题也和部署方案密切相关。5.3 核心页面拆解车位状态图与车辆进出操作前端最有记忆点的页面是“车位状态总览”。我建议用一块一块的格子渲染车位每个格子显示车位编号、车位类型、空闲还是占用空闲用绿色、占用用红色。这个效果用 Vue 的v-for加上动态 class 就能实现视觉效果非常直观答辩演示时开屏就能打动老师。核心代码如下div v-forspace in spaces :keyspace.id :class[parking-cell, space.status 0 ? free : occupied] {{ space.spaceNo }} /div车辆进出页面则要做成表单交互进场时输入车牌号、选择车位出场时输入车牌号后端返回订单信息和待收金额前端展示一个“确认出场”按钮。这个流程会让演示非常清楚现场输入一辆车进场后车位格子变红出场后格子变绿整个过程形成闭环。不要做太复杂的功能比如视频监控实时抓拍、车牌识别做不好会翻车把基础交互做顺就已经赢了大半。5.4 axios 封装与接口联调前端和后端联调时不要在每个页面里直接写axios.get而是统一在src/api目录里封装请求函数。axios 实例要配置 baseURL 和请求超时时间在请求拦截器里把 token 放进 header在响应拦截器里统一处理 code 为 401 时跳转登录页。这样改一个地方所有请求都生效代码干净。联调最大的问题是 baseURL 怎么配。开发阶段Vite 建议配置代理把/api前缀的请求代理到后端 8080这样浏览器眼中只在同一个域名下请求不会有跨域问题。配置在vite.config.js的 server 对象里。这套配置写进论文的“系统部署与调试”一节也是很有说服力的内容。5.5 vue 打包放进 Spring Boot生产部署方案毕设答辩时最稳妥的演示方式不是同时开前端开发服务器和后端服务而是把前端打包后直接放进 Spring Boot 项目里一个进程跑起来浏览器访问 8080 端口就能看到系统。操作很简单前端执行npm run build生成dist目录把里面的文件复制到 Spring Boot 的src/main/resources/static目录重启项目即可。这里有个细节必须处理如果你用了 Vue Router 的 history 模式直接刷新http://localhost:8080/order这样的页面Spring Boot 默认会返回 404因为它找不到对应的静态资源。解决办法是在后端写一个控制器把非/api开头的路径全部转发到index.html。代码可以放在配置类里继承WebMvcConfigurer重写addViewControllers或者做一个简单的 Controller。这个坑是每年的高频提问点你自己先把这个问题处理干净答辩不管老师问什么你都能接住。6. 论文撰写技巧从需求分析到测试报告6.1 论文骨架与各章节写作目标毕业论文的章节结构几乎是固定的你不需要创新只需要把每个章节该有的内容写清楚。完整骨架建议如下摘要与关键词一句话说清楚课题背景、采用技术、实现功能、最终效果第一章 绪论研究背景、国内外现状、研究内容与目标第二章 相关技术介绍Spring Boot、Vue、MySQL、MyBatis-Plus第三章 需求分析业务需求、功能需求、非功能需求、用例模型第四章 系统设计总体架构、功能模块设计、数据库设计、接口设计第五章 系统实现关键功能截图与核心代码片段说明第六章 系统测试测试环境、测试用例、测试结果第七章 总结与展望完成的工作、存在的不足、后续改进方向这里我要特别提醒绪论的“国内外研究现状”不要写成新闻稿也不要全篇复制别人论文。你只需要写出停车管理从人工登记到智能管理的趋势以及国内外在车牌识别、无感支付方面的发展。这部分可以引用少量文献但一定用你自己的工作去呼应它比如“虽然上述方案先进但多数学术场景仍以中小型系统为研究对象因此本文设计了一套更易于部署的轻量级方案”。6.2 需求分析别写成“功能列表”我每年都能看到大量需求分析章节写得跟产品说明书一样只列功能清单没有场景和约束。你要写的是“用户故事”管理员打开车位页面看到所有车位状态管理员点击空闲车位输入车牌号系统完成入场登记管理员看到占用车位点击该车位系统显示停车时长和费用。这种写法才叫需求分析因为它把角色、操作、系统响应三要素讲清楚了。非功能需求也不要落下。性能上查询车位状态接口响应时间应在 500ms 以内安全性上密码不能明文存储需要用 MD5 加盐或 BCrypt易用性上车位状态要能用颜色直观区分。这些内容不需要全部实现到极致但论文里必须体现你“想到过”答辩老师非常看重这一点。6.3 测试用例表设计技巧系统测试章节最容易混水位但表格做得好也能成为答辩亮点。我不建议只写“登录功能正常”要写成可执行的用例表格用例编号、测试模块、操作步骤、预期结果、实际结果、是否通过。比如“TC001 登录模块-输入正确用户名密码-点击登录-跳转首页-实际跳转-通过”这种表格清晰、可复核、读者一眼看明白。在论文里我建议放至少 10~15 条用例覆盖登录、车位查询、车辆入场、车辆出场、计费规则边界比如免费时间内出场、超过 24 小时停车、月卡续费、分页查询、异常操作比如重复入场、非法 token等。你还可以在测试结果里加一句“对计费模块进行了边界值测试确保免费时长临界点计算正确”学术味道一下就出来了。6.4 答辩高频问题与参考答案思路答辩环节我整理过一套高频问题你可以提前准备Spring Boot 自动配置原理是什么答基于EnableAutoConfiguration注解通过META-INF/spring.factories加载自动配置类根据条件注解按需装配。你要能说清楚 starter、条件注解、自动配置三个关键词。为什么选 MyBatis-Plus答在 MyBatis 基础上提供单表 CRUD 封装和条件构造器提高开发效率减少冗余 SQL。计费规则遇到跨天怎么处理答差值是毫秒级时间差用分钟计算跨天自然落在时长内再考虑单日封顶逻辑。前端有哪些交互细节答空车位点击后弹出进场表单占用车位点击后弹出出场确认框状态由后端返回后刷新页面。系统安全怎么保证答JWT 鉴权、密码加密、前端路由守卫、后端接口统一校验。这些问题没有标准完美答案核心是别背答案要把你的系统实现讲透。你只要亲手实现过一遍这些问题回答起来都顺。7. 常见问题与排查实录踩过的坑都在这7.1 前端刷新 404 与跨域两个老问题这两个问题是我见过最高频的几乎每个前后端分离项目都会碰到。前端刷新 404 就是因为路由是 history 模式刷新请求发给了后端而后端没有对应页面。解决办法有两种一种是改成 hash 模式URL 里会多一个#丑但零配置另一种是后端转发我建议用后端转发方案因为你在论文里可以说“前后端分离模式下前端路由交由后端托管保证页面刷新时正确返回入口页面”。跨域问题在开发阶段靠 Vite 代理解决在生产阶段因为前端文件已经放进后端静态目录同一个 8080 端口下访问根本不产生跨域。你如果能在论文里把这两件事的来龙去脉讲清楚说明你是真的理解了部署原理而不是只会照着视频敲。7.2 Spring Boot 版本太高引发的连锁反应如果你非要用 Spring Boot 3.x除了要装 JDK 17还要注意很多第三方依赖要升级到支持 Jakarta 的版本。MyBatis-Plus 也要选 3.5.3 以上才支持 Spring Boot 3。代码里的javax.servlet会变成jakarta.servlet网上老旧教程里的代码会大面积爆红。我的建议仍然是时间紧迫就老老实实用 2.7把精力花在业务实现和论文上别浪费在环境兼容上。你如果已经在 3.x 里卡了好几天也不要慌。把报错关键词复制到搜索框多半能找到解决方案。但你要清楚毕设目的是展示系统能力不是挑战最新框架没必要在环境问题上证明自己。等以后工作了再慢慢拥抱新特性也不迟。7.3 MyBatis-Plus 时间字段不自动填充很多同学在实体类上加了TableField(fill FieldFill.INSERT)但插入数据时createTime还是 null。这是因为 MyBatis-Plus 自定义填充需要你提供一个MetaObjectHandler实现类重写insertFill和updateFill方法。少了这个配置注解不会生效。这不是 bug而是框架的设计方式。调试方法很简单打个断点看 insert 语句是否包含 create_time 字段。如果不包含十有八九是 handler 没注册成 Spring Bean。这个问题在论文里不需要专门写但在项目代码里解决后你可以给自己记一笔“熟练使用 MyBatis-Plus 公共字段自动填充”面试时还能当技能点说。7.4 计费金额用 BigDecimal别用 double我再强调一次金额精度问题。停车场计费看似简单可一旦涉及包月、优惠券、叠加规则double 的误差就会被放大。BigDecimal 的构造函数要传字符串不要直接传 double比如new BigDecimal(0.1)得到的不是预期的 0.1。你写计费模块时所有金额计算都用 BigDecimal比较大小用compareTo不要用equals因为 5.0 和 5.00 在 equals 上可能不相等。在论文的测试章节可以专门写一个测试用例临时车停车 61 分钟按 5 元/小时计费实际应收 10 元。这种边界值用例能直接支持你“系统计费功能正确性验证”的论述非常加分。7.5 监控视频播放、图片上传这类加分项怎么接有的同学想给系统再做点加分项比如车位照片上传、监控视频播放。景观上这些确实高级但工作量不小。图片上传走本地存储即可视频播放如果你遇到的视频流是 m3u8 格式前端可以用 hls.js 直接播不需要依赖 Flash 插件也不需要额外装播放器。熟悉这套操作的原理后答辩时提一句也不慌但别让它们挤占核心功能的时间。我自己的体会是毕设项目贵在“闭环完整”而不是“功能堆砌”。一个简单但所有操作都能走通的停车场管理系统比一个做了十个功能却有一半报错的项目要强得多。你把车位状态、进出登记、计费规则、订单统计这条主线做得扎实再考虑要不要加彩蛋。这个顺序千万不要倒过来。