Bili-Docs
技术工具编程开发

一小时带你从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
  • email
  • 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 开头。
  • HTTP 方法
    • GET:查询资源
    • POST:创建资源
    • PUT / PATCH:更新资源(PUT 返回完整资源,PATCH 返回部分变更)
    • DELETE:删除资源

MySQL:创建数据库与表

本项目使用 MySQL。启动 MySQL Server 后连接数据库(终端或客户端都行)。

创建数据库:

  • create database test ...
  • use test

创建表(字段:id、name、email、age)。创建完成后:

  • show tables
  • select * from student(初始为空)

DAO 层:JPA Repository 与实体类

接下来从后往前写代码:DAO → Service → API。

1)加入 JPA 依赖并创建 DAO 包

创建 dao 包,新建 StudentRepository 接口:

  • @Repository
  • extends 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 实现新增逻辑:

  1. 校验 email 唯一性:Repository 增加方法 findByEmail(...)
    • 只要按命名规范写,JPA 会自动生成查询,不需要手写 SQL
  2. 如果 email 已占用,抛异常
  3. 将 DTO 转回 Student 实体(补一个反向 convert)
  4. repository.save(student)
  5. 返回 id(或返回 DTO,看你设计)

测试工具用 Postman(浏览器默认 GET,测不了 POST)。

删除接口:DELETE /student/{id}

删除使用 DELETE:

  • @DeleteMapping("/student/\{id\}")

Service 逻辑:

  1. 判断 id 是否存在,不存在抛异常
  2. repository.deleteById(id)

测试:删除后再 GET 会报错,数据库也只剩对应数据。

更新接口:PUT /student/{id}

更新一般使用 PUT:

  • @PutMapping("/student/\{id\}")
  • @PathVariable Long id
  • 参数用 @RequestParam(例如 name、email),可选传递

Service 逻辑:

  1. 校验 id 是否存在
  2. name 不为空且与原值不同才更新
  3. email 不为空且与原值不同才更新
  4. repository.save(student)
  5. 转 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 层

三层之间相互调用。即使项目变大,整体结构通常也还是这种方式,差别主要在业务对象更多、业务逻辑更复杂。

如果掌握了这个简单项目的开发流程,再做更大的项目,主要就是熟悉具体业务场景和业务逻辑。

结束语

关于这个项目的介绍我就讲到这里。如果你觉得这个视频对你有用,请记得一键三连。你的支持是我更新视频的最大动力,谢谢大家,再见。

On this page