一小时带你从0到1实现一个SpringBoot项目开发
视频详细讲解了如何从零开始搭建并开发一个基于Spring Boot的后端项目,涵盖环境搭建、RESTful API设计及数据库操作。
UP主: 程序员风筑 · 时长: 1h05m · 🔗 B站原视频
发布: 2024-04-23 · 收录: 2025-04-08
标签: Spring Boot · Java · 后端开发 · 编程教程
开场与目标
Hello,大家好,我是风柱。这期视频我们一起来学习,怎么利用 Spring Boot 快速开发一个项目。
Spring Boot 简介:为什么它能让开发更快
Spring Boot 是一个基于 Spring 框架的开源框架,主要作用是简化 Spring 应用程序的初始搭建和开发过程。它通过“约定优于配置”的方式,尽可能减少开发者的工作量,让开发 Spring 应用变得更快速、便捷、高效。
Spring Boot 大概在 2015、2016 年开始在各公司大量使用。在 Spring Boot 出来之前,大家都是基于 Spring + MyBatis 去搭建项目框架。那时候即便是比较有经验的工程师,可能也要花几个小时才能搭建好一个可以运行的项目;但 Spring Boot 可能半分钟到一分钟就可以初始化一个项目。
核心就是:提高开发效率,尽可能减少开发者工作量。
Spring Boot 的主要特点
1)简化配置:自动配置与 Starter
Spring Boot 用“约定优于配置”的原则,减少了传统 Spring 应用的大量配置。通过自动配置和 Starter 来简化项目配置过程,让开发者可以快速搭建一个可运行的 Spring 应用。
Spring 里提供了很多 Starter,对开发者来说直接引用 Starter 就可以了,配置项会大大减少,项目复杂度也会降低。
2)集成性强:开箱即用
Spring Boot 提供大量开箱即用的特性和功能,比如内嵌容器、健康检查、指标监控等。最近比较火的 AI 也是类似,Spring Boot 也提供了 AI 相关的 Starter,可以快速集成 OpenAI 或者其他一些大模型。
3)微服务:Spring Cloud 生态
Spring Boot 之后出现了 Spring Cloud,用来解决微服务架构开发,提供了很多组件,比如服务发现、配置中心、负载均衡等,帮助开发者快速构建可伸缩、高可用的微服务系统。
4)内嵌服务器:不再依赖外部 Tomcat
以前开发者需要单独部署一个 Tomcat,把 Spring 应用打包成 jar/war 再部署到 Tomcat 才能运行。现在 Tomcat 可以集成到 Spring Boot 应用里,本地开发直接运行 main 方法就能启动服务,不再需要外部应用服务器。
5)生态丰富:扩展与插件多
由于 Spring Boot 广泛应用、生态强大,开发者可以轻松使用各种扩展和插件,提高开发效率和应用质量。
项目结构:前后端分离与三层架构
我们这个项目分为前端和后端,这里主要实现后端功能。
后端代码主要分为几层:
- API 层:接收浏览器或客户端的 HTTP 请求,对外提供 GET/POST/PUT/DELETE 等 API 接口。
- Service 层:实现具体业务逻辑。
- DAO(Data Access)层:访问数据库的代码。因为数据库是关系型的,而 Java 是面向对象,需要把表结构映射成 Java 对象。
调用关系是:API 层 → Service 层 → DAO 层。
示例业务:Student 的增删改查
项目实现一个简单的 Student 功能。Student 具备属性:
- id
- name
- age
我们要实现对 Student 的常见操作:新增、查询、更新、删除等。功能虽然简单,但大项目的代码结构基本也是这样,只是业务对象更多、Service 逻辑更复杂。
初始化 Spring Boot 项目:start.spring.io
初始化 Spring Boot 应用可以在 start.spring.io 完成。
关键选项:
- Project:依赖管理工具,国内大部分用 Maven。
- Language:Java
- Spring Boot:选最新正式版
- Packaging:Jar
- Java 版本:Spring Boot 3 最低支持 Java 17
依赖选择:
- Spring Web:提供 REST API
- Spring Data JPA:数据库访问抽象
- MySQL Driver:连接 MySQL
选好后点 Generate 生成项目。
导入 IDE 与项目结构说明
下载代码后用 IDE 导入(打开 pom.xml)。
项目结构:
src/main/java:Java 源码src/main/resources:静态文件、配置文件等application.properties:默认配置文件src/test:单元测试、集成测试pom.xml:依赖与构建配置
启动方式:运行 DemoApplication(main 方法)。
解决启动报错:先移除 JPA 依赖再启动
首次启动可能报错:需要配置数据库访问 URL。原因是引入了 JPA,Spring Boot 会要求数据库配置,但此时数据库还没创建。
做法:先暂时去掉 JPA 相关依赖,Maven reload 后再启动。启动成功后访问 http://localhost:8080 会返回 404,因为还没写任何 API。
编写第一个 Controller:Hello 接口
所有 API 通过 Controller 提供。示例:
- 新建
TestController - 加
@RestController - 写一个方法返回
"Hello world" - 用
@GetMapping("/hello")
重启后访问 /hello 就能返回字符串。
如果返回对象,Spring 会自动把 Java 对象序列化成 JSON。注意:自定义对象需要有对应的 getter/setter,否则无法正常序列化。
RESTful API 基本规范
REST API 主要看两点:路径(endpoint) 和 HTTP 动词。
- 路径:代表资源,不能有动词,只能用名词,通常对应数据库表名。
- 例如我们操作 student 资源,路径一般以
/student开头。
- 例如我们操作 student 资源,路径一般以
- HTTP 方法:
- GET:查询资源
- POST:创建资源
- PUT / PATCH:更新资源(PUT 返回完整资源,PATCH 返回部分变更)
- DELETE:删除资源
MySQL:创建数据库与表
本项目使用 MySQL。启动 MySQL Server 后连接数据库(终端或客户端都行)。
创建数据库:
create database test ...use test
创建表(字段:id、name、email、age)。创建完成后:
show tablesselect * from student(初始为空)
DAO 层:JPA Repository 与实体类
接下来从后往前写代码:DAO → Service → API。
1)加入 JPA 依赖并创建 DAO 包
创建 dao 包,新建 StudentRepository 接口:
@Repositoryextends JpaRepository\<Student, Long>
2)创建实体类 Student 映射表结构
新建 Student 类:
@Entity@Table(name="student")- 字段:id、name、email、age
- id 需要:
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
- 字段映射可用
@Column
Service 层:接口与实现
创建 service 包:
StudentService(接口)StudentServiceImpl(实现)
先实现一个方法:getStudentById(Long id)
在实现类中注入 StudentRepository,调用 findById。因为返回 Optional,不存在就抛异常(这里先简单用 RuntimeException)。
API 层:Controller 提供查询接口
创建 controller 包,新建 Controller:
@RestController@GetMapping("/student/\{id\}")@PathVariable Long id- 注入
StudentService - 返回查询结果
配置数据库连接并启动
在 application.properties 配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test...- username:root
- password:空(按自己实际情况)
启动应用后,先插入一条数据:
insert into student(name,email,age) values (...)
访问 /student/1,如果返回为空,检查实体类是否有 getter/setter;补齐后即可正常返回 JSON。
返回 DTO:避免直接暴露数据库实体
直接返回数据库实体不合理,因为表里可能有不想给前端看的字段(例如密码、加密字段等)。所以需要 DTO。
新建 dto 包,创建 StudentDTO,只保留需要返回的字段(例如 id、name、email)。
Converter:Student 与 StudentDTO 的转换
新建 converter 包,创建 StudentConverter:
- 写静态方法:
convert(Student student)→StudentDTO - 设置 id、name、email 后返回
Service 层返回 DTO,Controller 也返回 DTO。
统一返回格式:Response<T>
接口返回一般要统一封装,包含:
- success(是否成功)
- data(泛型数据)
- errorMessage(错误信息)
创建 Response\<T> 泛型类,并提供静态方法:
Response.success(data)Response.fail(errorMessage)
Controller 返回 Response\<StudentDTO>,前端可统一判断 success 字段。
新增接口:POST /student
新增资源使用 POST:
@PostMapping("/student")@RequestBody StudentDTO dto
在 Service 实现新增逻辑:
- 校验 email 唯一性:Repository 增加方法
findByEmail(...)- 只要按命名规范写,JPA 会自动生成查询,不需要手写 SQL
- 如果 email 已占用,抛异常
- 将 DTO 转回 Student 实体(补一个反向 convert)
repository.save(student)- 返回 id(或返回 DTO,看你设计)
测试工具用 Postman(浏览器默认 GET,测不了 POST)。
删除接口:DELETE /student/{id}
删除使用 DELETE:
@DeleteMapping("/student/\{id\}")
Service 逻辑:
- 判断 id 是否存在,不存在抛异常
repository.deleteById(id)
测试:删除后再 GET 会报错,数据库也只剩对应数据。
更新接口:PUT /student/{id}
更新一般使用 PUT:
@PutMapping("/student/\{id\}")@PathVariable Long id- 参数用
@RequestParam(例如 name、email),可选传递
Service 逻辑:
- 校验 id 是否存在
- name 不为空且与原值不同才更新
- email 不为空且与原值不同才更新
repository.save(student)- 转 DTO 返回
更新操作通常会加事务注解,保证出错可回滚(Transaction)。
测试:分别更新 name、更新 email、同时更新两者,返回结果符合预期。
打包与运行:Maven 构建 Jar
打包命令:
mvn clean install
成功后在 target 目录下生成 jar 包。进入目录后运行:
java -jar xxx.jar
服务启动后即可正常访问。
修改端口示例:
server.port=8081
修改后同样可以正常启动并访问。
总结:从 0 到 1 的完整开发流程
这次项目主要讲解了 Spring Boot 项目的开发流程,架构分为三层:
- API 层
- Service 层
- DAO 层
三层之间相互调用。即使项目变大,整体结构通常也还是这种方式,差别主要在业务对象更多、业务逻辑更复杂。
如果掌握了这个简单项目的开发流程,再做更大的项目,主要就是熟悉具体业务场景和业务逻辑。
结束语
关于这个项目的介绍我就讲到这里。如果你觉得这个视频对你有用,请记得一键三连。你的支持是我更新视频的最大动力,谢谢大家,再见。