SpringBoot仓库管理系统实战:从环境搭建到功能测试完整指南
这次我们来看一个基于 SpringBoot 的仓库管理系统项目。对于 Java 后端开发者,尤其是正在学习或准备面试的同学,一个功能完整、技术栈主流、附带录像讲解的实战项目,其价值远超一堆零散的理论知识。这个项目不仅涵盖了 SpringBoot、MyBatis-Plus、Thymeleaf、MySQL 等核心技术的整合应用,更关键的是,它提供了完整的操作录像,这意味着你可以直观地看到从环境搭建到功能演示的全过程,极大降低了学习门槛。
本文将带你深入拆解这个“SpringBoot684仓库管理系统录像”项目。我们会重点关注它的技术架构、核心功能模块、本地部署的完整流程,以及如何利用录像资源高效学习。无论你是想快速搭建一个可运行的 Demo 用于毕业设计,还是希望深入理解一个典型管理系统的后端实现逻辑,这篇文章都能提供清晰的指引。接下来,我们将从项目核心能力速览开始,一步步带你跑通整个系统。
1. 核心能力速览
在深入代码之前,我们先通过一个表格快速了解这个项目的整体面貌和关键信息,帮助你判断它是否符合你的需求。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 基于 SpringBoot 的 Web 版仓库管理系统 |
| 技术栈 | SpringBoot 2.x, MyBatis-Plus, Thymeleaf, MySQL, Ajax, Maven |
| 前端展示 | 采用 Thymeleaf 模板引擎渲染 HTML 页面,非前后端分离架构 |
| 核心功能 | 仓库管理、商品管理、入库/出库管理、库存盘点、用户与权限管理、数据统计报表 |
| 数据交互 | 后端 RESTful 风格接口,前端使用 Ajax 进行异步数据交互 |
| 部署方式 | 本地 Maven 项目,通过 IDE(如 IDEA)直接运行或打包为 Jar 部署 |
| 学习资源 | 附带系统操作与功能演示录像,直观展示业务流程 |
| 适合人群 | Java/SpringBoot 初学者、毕业设计学生、需要快速了解传统管理系统开发的开发者 |
| 硬件门槛 | 普通开发机即可,主要依赖 JDK、MySQL 和 Maven 环境 |
从表格可以看出,这是一个非常典型的单体架构Web 应用,技术选型成熟且学习资料丰富。最大的亮点在于附带的录像,它能帮你跨越“看代码不知如何操作”的鸿沟,直接看到系统的运行效果和交互逻辑。
2. 适用场景与使用边界
明确一个项目的适用场景,能帮助你更高效地利用它。
这个项目适合谁?
- SpringBoot 初学者:通过一个完整的业务系统,理解控制器(Controller)、服务(Service)、数据访问层(Mapper)的分层架构,以及 MyBatis-Plus 简化 CRUD 的操作。
- 毕业设计/课程设计者:需要一个功能完整、界面清晰、技术栈不过时的管理系统作为基础框架,可以在此基础上进行功能扩展或修改主题。
- 面试准备者:项目涉及库存管理、事务控制(如入库出库)、权限校验等常见业务场景,是面试中讨论项目经验的优质素材。
- 传统行业信息化入门者:想了解一个典型的进销存或仓库管理系统的核心业务模块和数据流。
它能解决什么问题?
- 技术整合实践:展示如何将 SpringBoot、MyBatis-Plus、Thymeleaf、MySQL 等组件无缝集成到一个项目中。
- 业务逻辑学习:提供完整的仓库管理业务闭环,包括商品信息维护、库存变动记录、盘点流程等。
- 快速原型搭建:基于此项目代码,可以快速修改为一个图书管理系统、设备管理系统等类似需求的应用。
它的局限性(使用边界)
- 架构层面:采用单体架构和 Thymeleaf 服务器端渲染,而非当前更流行的“SpringBoot + Vue/React”前后端分离架构。如果你主要想学习前后端分离开发,需要自行改造前端部分。
- 深度层面:作为一个教学/示例项目,可能在异常处理、日志规范、高性能缓存、复杂事务、微服务化等方面未做深入设计。适合入门和了解核心流程。
- 安全层面:通常此类项目实现了基础的登录拦截和权限控制,但生产级别的安全防护(如防 SQL 注入、XSS 攻击、CSRF 防护、详细的权限粒度控制)需要自行加强。
- 版权与数据:项目代码可用于学习和个人练习。如果用于商业用途,需注意代码版权,并确保所有业务数据均为测试数据,不涉及真实企业敏感信息。
3. 环境准备与前置条件
在开始部署之前,请确保你的开发环境满足以下要求。这是项目能够成功运行的基础。
1. 操作系统
- Windows 10/11, macOS, 或 Linux 发行版均可。本文演示以 Windows 环境为主,命令在 IDEA 终端中执行。
2. Java 开发环境
- JDK:版本 1.8 或以上(推荐 JDK 8, JDK 11 或 JDK 17)。确保
JAVA_HOME环境变量已正确配置。# 在终端或CMD中验证 java -version
3. 项目管理与构建工具
- Maven:版本 3.6.x 或以上。用于管理项目依赖和构建。同样需要配置环境变量或在 IDE 中指定。
# 验证 Maven mvn -v
4. 集成开发环境 (IDE)
- IntelliJ IDEA:社区版或旗舰版均可。这是运行和调试 SpringBoot 项目最便捷的工具。确保已安装并配置好 Maven。
5. 数据库
- MySQL:版本 5.7 或 8.0。需要提前安装并启动 MySQL 服务。
- 数据库管理工具:可选 Navicat、DBeaver 或 MySQL Workbench,用于执行 SQL 脚本和查看数据。
6. 项目源码与录像
- 获取项目压缩包,其中应包含完整的 Maven 项目源码、SQL 初始化脚本以及最重要的系统功能演示录像文件。
环境检查清单:
- [ ] JDK 版本 >= 1.8
- [ ] Maven 版本 >= 3.6
- [ ] MySQL 服务已启动(默认端口 3306)
- [ ] IDEA 已安装并可正常创建/导入 Maven 项目
- [ ] 项目源码解压至无中文、无空格的目录路径
4. 安装部署与启动方式
拿到项目源码后,按照以下步骤操作,即可在本地启动系统。
4.1 数据库初始化
这是第一步,也是关键一步。系统运行依赖数据库中的表结构和初始数据。
创建数据库:使用 MySQL 客户端连接你的数据库服务器。
-- 创建一个新的数据库,字符集建议使用 utf8mb4 以支持完整 Unicode CREATE DATABASE IF NOT EXISTS `warehouse_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `warehouse_db`;执行 SQL 脚本:在项目资源文件夹(通常是
src/main/resources或项目根目录下的sql文件夹)中找到数据库脚本文件(如warehouse.sql)。用数据库工具打开该文件并全部执行,或者使用命令行导入。# 命令行导入示例 (在脚本文件所在目录执行) mysql -u root -p warehouse_db < warehouse.sql执行成功后,检查数据库中是否生成了
user,goods,warehouse,in_stock,out_stock,inventory等相关表。
4.2 项目配置修改
数据库连接信息需要根据你的本地环境进行配置。
- 定位配置文件:在项目中找到
src/main/resources/application.yml或application.properties文件。 - 修改数据库连接:主要修改
url、username和password。# application.yml 示例配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/warehouse_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root # 改为你的MySQL用户名 password: yourpassword # 改为你的MySQL密码 thymeleaf: cache: false # 开发时关闭缓存,修改页面后立即生效# application.properties 示例配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/warehouse_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=yourpassword spring.thymeleaf.cache=false
4.3 依赖下载与项目导入
- 使用 IDEA 导入:打开 IDEA,选择
File->Open,找到并选择项目根目录下的pom.xml文件,以 Maven 项目形式打开。 - 等待依赖下载:IDEA 会自动识别 Maven 项目并开始下载
pom.xml中声明的所有依赖(SpringBoot、MyBatis-Plus、MySQL驱动等)。这个过程取决于网络速度,请耐心等待右下角的进度条完成。你可以查看 IDEA 的Maven工具窗口确认依赖是否下载成功。
4.4 启动 SpringBoot 应用
依赖下载完成后,就可以启动项目了。
- 找到主启动类:在
src/main/java目录下,找到包路径(如com.warehouse)下的XxxApplication.java文件,通常类名包含Application。 - 运行主类:右键点击这个主类,选择
Run ‘XxxApplication‘。IDEA 会启动内嵌的 Tomcat 服务器。 - 观察控制台日志:启动成功后,控制台会打印出 SpringBoot 的 Banner 以及一系列启动信息,最后看到类似
Tomcat started on port(s): 8080或Started XxxApplication in x.xxx seconds的日志,说明服务已成功启动。 - 访问系统:打开浏览器,输入
http://localhost:8080或http://127.0.0.1:8080。你应该能看到系统的登录页面。
常见启动问题:
- 端口冲突:如果 8080 端口被占用,可以在
application.yml中修改server.port属性,例如改为server.port: 8088。 - 数据库连接失败:检查配置文件中的数据库地址、端口、用户名、密码是否正确,并确认 MySQL 服务是否已启动。
- 依赖下载失败:检查网络,或尝试在 IDEA 的 Maven 设置中更换为国内镜像源(如阿里云镜像),然后点击
Reimport。
5. 功能测试与效果验证
系统启动后,结合项目附带的录像,我们可以系统地验证各个功能模块。录像的价值在于,它直观地展示了正确的操作流程和预期效果,你可以边看边操作。
5.1 登录与权限验证
- 测试目的:验证系统安全入口和基础权限控制。
- 操作步骤:
- 访问
http://localhost:8080,进入登录页。 - 使用 SQL 脚本中初始化的账号(如 admin/123456)进行登录。
- 观察登录成功后是否跳转到主页面,以及页面菜单是否根据用户角色正确加载。
- 访问
- 预期结果:登录成功,进入系统主界面。不同的用户角色(如管理员、普通操作员)看到的菜单项可能不同。
- 判断成功:能成功进入系统内部页面,且未登录时直接访问内部 URL 会被重定向到登录页。
5.2 基础数据管理模块测试
这是系统的基石,通常包括仓库管理、商品管理、供应商管理、客户管理等。
- 以“商品管理”为例:
- 点击导航菜单中的“商品管理”或类似入口。
- 点击“新增”按钮,填写商品编号、名称、规格、单位、所属分类等信息,然后提交。
- 在商品列表中,找到刚新增的商品,尝试进行“编辑”、“删除”操作。
- 测试列表的分页、条件查询(按名称、编号搜索)功能。
- 观察要点:
- 新增、编辑、删除操作后,页面是否有成功提示?
- 操作后列表数据是否实时刷新?
- 删除操作是否有二次确认提示?
- 这些交互通常通过 Ajax 实现,可以打开浏览器的开发者工具(F12),切换到
Network标签,观察操作触发的 HTTP 请求和响应,理解前后端数据交互格式。
5.3 核心业务流程测试
仓库管理系统的核心在于库存的流动,即入库和出库。
- 入库流程测试:
- 进入“入库管理”或“采购入库”页面。
- 点击“新建入库单”。
- 选择供应商、入库仓库,然后添加商品行(选择商品、输入数量、单价)。
- 提交入库单。
- 验证:检查该商品的库存数量是否增加;检查“库存流水”或“入库记录”中是否生成了一条记录。
- 出库流程测试:
- 进入“出库管理”或“销售出库”页面。
- 新建出库单,选择客户、出库仓库,添加商品行。
- 关键验证:出库数量不能大于当前库存数量。尝试输入一个大于库存的数量,系统应给出明确提示,并阻止提交。
- 提交有效的出库单。
- 验证:商品库存相应减少,出库记录生成。
- 结合录像学习:观看录像中入库、出库的操作演示,注意观察每个步骤的页面跳转、表单填写和最终的数据变化,这能帮你快速理解业务逻辑在代码中是如何串联的。
5.4 库存盘点与报表查询
- 库存盘点:找到“库存盘点”功能,通常可以查看所有仓库所有商品的实时库存,并可能支持导出 Excel。
- 报表查询:测试“入库报表”、“出库报表”、“库存预警”等功能。输入时间范围、商品或仓库等条件,查看数据统计和列表展示是否正确。
- 验证方法:手动在数据库中对某商品做一次入库,然后刷新报表页面,看统计数字和记录是否同步更新。
5.5 用户与系统管理
- 用户管理:以管理员身份登录,尝试新增、修改、禁用其他用户账号。
- 角色/权限管理:查看系统是否支持角色分配和菜单权限控制。可以创建一个新角色,只分配部分菜单权限,然后用属于该角色的账号登录,验证菜单是否被正确过滤。
通过以上测试,你不仅能验证系统功能是否完整,更能通过实际操作和观察网络请求,深入理解一个 SpringBoot 应用如何处理表单提交、数据库事务、业务校验和前后端交互。
6. 接口 API 与批量任务
虽然这是一个基于 Thymeleaf 的服务器渲染项目,前端页面与后端紧密耦合,但其后端 Controller 通常仍会设计为 RESTful 或类 RESTful 风格的接口,供前端 Ajax 调用。理解这些接口是深入项目架构的关键。
6.1 后端接口分析
- 定位接口:在 IDEA 中,查看
controller包下的各个 Java 类。你会看到类似@RestController或@Controller注解的类,其中的方法通常带有@RequestMapping,@GetMapping,@PostMapping等注解,这就是接口定义。 - 接口示例:以商品管理为例,你可能会找到如下接口:
@RestController @RequestMapping("/api/goods") public class GoodsController { @Autowired private GoodsService goodsService; // 分页查询商品列表 @GetMapping("/list") public Result list(GoodsQuery query, Page page) { IPage<Goods> goodsPage = goodsService.page(page, new QueryWrapper<>(query)); return Result.success(goodsPage); } // 新增商品 @PostMapping("/add") public Result add(@RequestBody Goods goods) { boolean saved = goodsService.save(goods); return saved ? Result.success() : Result.error("新增失败"); } // 更新商品 @PostMapping("/update") public Result update(@RequestBody Goods goods) { boolean updated = goodsService.updateById(goods); return updated ? Result.success() : Result.error("更新失败"); } // 删除商品 @PostMapping("/delete/{id}") public Result delete(@PathVariable Long id) { boolean removed = goodsService.removeById(id); return removed ? Result.success() : Result.error("删除失败"); } } - 接口测试:即使前端页面存在,你也可以使用
Postman、Apifox或curl命令直接测试这些后端接口,这有助于你单独验证后端逻辑。# 使用 curl 测试查询接口示例 curl -X GET "http://localhost:8080/api/goods/list?pageNum=1&pageSize=10&name=电脑"# 使用 Python requests 测试新增接口示例 import requests import json url = "http://localhost:8080/api/goods/add" headers = {'Content-Type': 'application/json'} data = { "goodsCode": "IT-001", "goodsName": "笔记本电脑", "spec": "16G/512G", "unit": "台", "categoryId": 1 } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.json())
6.2 批量任务处理
在仓库管理系统中,批量任务很常见,例如:
- 批量导入商品:通过 Excel 文件一次性导入大量商品数据。
- 批量盘点库存:导出当前库存清单,线下盘点后,再通过文件批量更新系统库存。
- 批量生成出入库单:根据采购计划或销售订单批量生成单据。
在项目中如何实现?
- 查找对应功能:在菜单或代码中寻找“导入”、“导出”、“批量操作”等关键词。
- 分析代码逻辑:
- 导入:通常有一个文件上传接口 (
@PostMapping("/import")),接收MultipartFile,使用Apache POI或EasyExcel解析 Excel 数据,然后循环调用Service层的保存方法。需要注意事务控制,要么全部成功,要么全部回滚。 - 导出:查询数据后,使用
POI或EasyExcel将数据写入HttpServletResponse输出流,实现文件下载。
- 导入:通常有一个文件上传接口 (
- 测试批量功能:如果项目提供了导入模板(Excel),下载后填写一些测试数据,然后使用系统的导入功能上传,观察数据是否成功插入数据库,以及是否有错误提示。
对于学习者来说,重点不是直接运行批量任务,而是理解其代码实现,特别是文件处理、数据校验、事务管理和性能考量(如大数据量导入时的分批处理)。
7. 资源占用与性能观察
作为一个 SpringBoot 单体应用,其资源消耗主要在于 JVM 堆内存和数据库连接。在本地开发和学习阶段,性能通常不是瓶颈,但了解如何观察和简单优化是有益的。
JVM 内存占用:
- 观察方式:启动应用后,可以使用 JDK 自带的
jconsole或jvisualvm工具连接到本地 Java 进程,查看堆内存使用情况。 - 典型值:一个简单的仓库管理系统,在本地启动后,堆内存占用通常在 200MB - 500MB 之间,具体取决于加载的数据量和框架组件。
- 调整:如果需要,可以在 IDEA 的启动配置中修改 JVM 参数,例如
-Xms256m -Xmx512m来设置初始堆和最大堆大小。
- 观察方式:启动应用后,可以使用 JDK 自带的
数据库连接池:
- SpringBoot 默认使用
HikariCP作为数据库连接池。你可以在application.yml中配置其参数。
spring: datasource: hikari: maximum-pool-size: 10 # 最大连接数,根据并发调整 minimum-idle: 5 # 最小空闲连接 connection-timeout: 30000 # 连接超时时间(ms)- 连接池配置不当可能导致数据库连接耗尽。在并发测试或批量任务时需要注意。
- SpringBoot 默认使用
应用启动时间:
- 首次启动因为要加载类和初始化连接,可能稍慢(几秒到十几秒)。热重启(DevTools)后会快很多。
- 启动慢的一个常见原因是依赖过多或数据库连接超时。检查控制台日志是否有警告。
页面响应时间:
- 在浏览器开发者工具的
Network面板中,可以看到每个页面请求和 Ajax 请求的耗时。 - 如果列表页查询缓慢,可能是数据量太大没有分页,或 SQL 查询未优化。可以打开 MyBatis-Plus 的 SQL 日志来观察执行的语句。
# 在 application.yml 中开启 SQL 日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl- 在浏览器开发者工具的
对于学习项目,性能优化的优先级不高。但了解这些观察点,能帮助你在未来开发生产项目时建立基本的性能意识。
8. 常见问题与排查方法
在部署和运行过程中,你可能会遇到一些问题。下表汇总了常见问题及其解决方法。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
启动时报java.net.ConnectException: Connection refused | 数据库服务未启动,或连接配置错误(端口、IP)。 | 1. 检查 MySQL 服务是否运行。 2. 核对 application.yml中的url。 | 启动 MySQL 服务,或修正数据库连接配置。 |
启动时报Unknown database ‘warehouse_db‘ | 指定的数据库不存在。 | 检查 MySQL 中是否已创建项目所需的数据库。 | 执行提供的 SQL 脚本创建数据库和表。 |
启动时报Table ‘xxx‘ doesn‘t exist | 数据库表不存在。 | 检查 SQL 脚本是否完全执行成功。 | 重新执行完整的 SQL 脚本。 |
启动时报Access denied for user ‘root‘@‘localhost‘ | 数据库用户名或密码错误。 | 核对application.yml中的username和password。 | 使用正确的 MySQL 凭据,或创建项目专用的数据库用户。 |
| 页面访问 404 | 1. 服务未成功启动。 2. 访问的 URL 路径不对。 3. Thymeleaf 模板文件位置不对。 | 1. 查看控制台是否有启动成功的日志。 2. 检查浏览器地址栏 URL 是否与控制器 @RequestMapping匹配。3. 检查 templates目录下是否有对应的.html文件。 | 1. 根据错误日志修复启动问题。 2. 通过首页或已知有效链接进入。 3. 确保静态资源路径正确。 |
| 页面样式 (CSS/JS) 丢失 | 静态资源未被正确加载。SpringBoot 默认从static目录提供静态资源。 | 1. 按 F12 查看Console和Network标签,看是否有 404 错误。2. 检查 static目录结构。 | 确保 CSS/JS 文件放在src/main/resources/static/下,并在 HTML 中使用正确相对路径引用。 |
| 新增/修改数据后页面无变化 | 1. 可能未成功提交。 2. 后端处理失败但前端未提示。 3. 浏览器缓存。 | 1. F12 查看Network,确认请求是否发出且响应成功。2. 查看控制台后端日志是否有异常。 3. 尝试强制刷新页面或清空缓存。 | 1. 根据网络请求和后台日志定位问题。 2. 检查前端 Ajax 的回调函数是否处理了错误情况。 |
| 分页或查询功能失效 | 前端传递的分页参数名与后端接收参数名不匹配。 | F12 查看查询请求的 URL 参数,与后端 Controller 方法参数对比。 | 调整前端请求参数或后端接收参数,确保命名一致。通常使用pageNum,pageSize。 |
| 录像文件无法播放或内容不符 | 视频编码格式问题,或录像并非针对此版本项目。 | 尝试使用 VLC、PotPlayer 等通用播放器。核对录像中演示的功能是否与当前代码版本一致。 | 转换视频格式,或寻找与项目代码匹配的演示材料。 |
通用排查思路:
- 看日志:控制台输出的错误信息是解决问题的第一线索。
- 查网络:浏览器 F12 的
Network面板能看清前后端每一次交互的细节。 - 对配置:反复核对
application.yml、数据库、端口等配置信息。 - 搜错误:将具体的错误信息复制到搜索引擎或技术社区(如 CSDN、Stack Overflow)查找解决方案。
9. 最佳实践与使用建议
为了让你从这个项目中获得最大收益,并安全、高效地使用它,这里有一些建议。
- 第一步:先跑通,再修改:不要一开始就深入代码。先严格按照部署步骤,把项目原封不动地在本地运行起来,并跟着录像操作一遍所有功能。建立对系统的整体感性认识。
- 代码学习路线:功能跑通后,按以下顺序阅读源码:
- 入口:从
XxxApplication主类开始。 - 配置:浏览
application.yml了解项目配置。 - 实体层:查看
entity包下的 Java 类,理解数据库表结构映射。 - 数据层:查看
mapper包,了解 MyBatis-Plus 的BaseMapper如何使用。 - 业务层:查看
service包及其实现类,理解核心业务逻辑。 - 控制层:查看
controller包,理解请求如何被接收和处理,以及如何返回响应。 - 视图层:查看
resources/templates下的 HTML 文件,学习 Thymeleaf 语法。
- 入口:从
- 版本管理与二次开发:建议使用 Git 初始化本项目目录。在对代码进行任何修改前,先进行一次提交。这样,即使改乱了,也可以轻松回退到原始状态。
- 数据库操作谨慎:在测试删除、更新等操作时,尤其是涉及外键关联的数据,最好先备份数据库,或在测试环境中进行。
- 扩展功能练习:在理解原有代码的基础上,尝试添加新功能,例如:
- 为商品添加一个“图片上传”功能。
- 实现一个“库存预警”功能,当库存低于安全值时发送邮件(模拟)或标记。
- 将某个列表页的导出功能从 Excel 改为 PDF。
- 向生产级项目演进思考:对比这个学习项目,思考一个真正的生产系统还需要什么?
- 日志:集成 SLF4J + Logback,规范地记录操作日志和错误日志。
- 安全:加强密码加密(使用 BCrypt),添加更细粒度的权限控制(如按钮级别)。
- API 文档:集成 Swagger/knife4j,为后端接口生成在线文档。
- 缓存:对频繁查询且不常变的数据(如商品分类)使用 Redis 缓存。
- 前后端分离改造:这是一个很好的进阶练习,将 Thymeleaf 页面替换为 Vue/React 前端项目,后端 Controller 调整为纯 JSON API。
- 合规与版权:项目代码用于学习和个人作品展示是合适的。如果用于商业用途或分发,请务必确认源码的许可证,并尊重原作者的版权。系统中使用的任何图标、字体等资源也需注意版权问题。
这个“SpringBoot684仓库管理系统录像”项目是一个非常好的学习跳板。它为你提供了一个可运行、可观察、可调试的完整案例。录像的存在更是将学习曲线大幅拉平。建议你将本文作为操作手册,结合项目源码和录像,从“看一遍”到“跑一遍”,再到“改一遍”,最终达到“造一遍”的层次,真正掌握 SpringBoot 全栈开发的精髓。如果在学习过程中遇到具体问题,欢迎在评论区交流探讨。