SpringBoot3 框架快速搭建与项目工程详解

 更新时间:2026年02月12日 10:03:48   作者:一直都在572  
本文将从项目搭建、核心配置、分层开发、统一返回与异常处理等维度,详细讲解SpringBoot3项目的构建与工程设计,帮助开发者快速上手,感兴趣的朋友跟随小编一起看看吧

在后端开发领域,SpringBoot 凭借其 “约定优于配置” 的核心思想,极大简化了 Spring 应用的搭建与开发流程。SpringBoot3 作为其最新稳定版本,不仅兼容 Spring 6 的核心特性,还在性能优化、原生镜像支持等方面有显著提升。本文将从项目搭建、核心配置、分层开发、统一返回与异常处理等维度,详细讲解 SpringBoot3 项目的构建与工程设计,帮助开发者快速上手。

一、项目整体架构设计

1. 技术栈选型

1.1 后端技术栈

核心框架:SpringBoot3(基于 Java17,简化 Spring 配置,提升开发效率)

数据持久层:MyBatis-Plus(简化 MySQL 操作,提供 CRUD 接口、分页插件等)

数据库:MySQL8.0(存储用户核心数据)

工具类:Lombok(简化实体类代码)、FastJSON(JSON 数据序列化 / 反序列化)

接口文档:Knife4j(基于 Swagger,自动生成接口文档,方便前后端联调)

1.2 前端技术栈

核心框架:Vue3(Composition API 语法,响应式更高效)

UI 组件库:Element-Plus(适配 Vue3 的 UI 组件库,提供表格、表单、弹窗等常用组件)

网络请求:Axios(封装请求拦截器、响应拦截器,统一处理接口请求)

路由管理:Vue Router4(实现页面跳转与路由守卫)

状态管理:Pinia(Vue3 官方推荐,替代 Vuex,轻量高效)

2. 架构流程图

前端(Vue3 + Element-Plus)
    │
    ├─ 页面组件(用户列表、新增/编辑弹窗)
    ├─ 网络请求(Axios 封装)
    ├─ 路由管理(Vue Router)
    └─ 状态管理(Pinia)
        │
        ▼
HTTP 请求(RESTful API)
        │
        ▼
后端(SpringBoot3)
    │
    ├─ 控制层(Controller:接收请求、返回响应)
    ├─ 服务层(Service:业务逻辑处理)
    ├─ 持久层(Mapper:MyBatis-Plus 数据访问)
    ├─ 实体层(Entity:数据库表映射)
    ├─ 公共组件(统一返回、全局异常处理)
    └─ 接口文档(Knife4j)
        │
        ▼
数据库(MySQL8.0)

3. 核心功能模块

用户列表展示:表格形式展示用户 ID、用户名、生日、性别、地址等信息,支持分页加载

条件查询功能:根据用户名、地址筛选用户数据,支持清空查询条件

新增用户功能:通过弹窗表单收集用户信息,表单校验后提交至后端

编辑用户功能:回显选中用户信息至弹窗,修改后提交更新

删除功能:支持单条用户删除、批量用户删除,删除前弹出确认提示

数据格式化:对生日字段进行统一格式化(年 - 月 - 日),提升页面可读性

二、IDEA创建Spring Boot

删除无用的文件

然后在pom.xml文件当中进行配置

配置maven

选择 pom.xml 然后加载依赖

三、Spring boot内容简介

四、pom.xml文件

spring-boot-dependencies:核心依赖在父工程里面

我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本

启动器

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
</dependency>

启动器:说白了就是SpringBoot启动的场景

比如Spring-boot-srarter-web,他会帮助我们自动导入web环境所有的依赖

SpringBoot会将所有的功能场景,都变成一个个的启动器

我们需要使用的功能,只需要找到他们的启动器便可以进行使用

启动成功

加载web启动

<!--加载web-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

controller层

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String getHello(){
        return "Hello world";
    }
}

配置文件

server.port=8081

访问地址:http://localhost:8081/hello

五、统一返回包装类 Result

包装类:作用是统一后端返回的数据类型,code 是作为前端判断请求成功的依据,msg 是错误的信息,data 是返回给前端的数据

public class Result {
    private String code;
    private Object data;
    private String msg;
    public static Result success() {
        Result result = new Result();
        result.setCode("200");
        result.setMsg("请求成功");
        return result;
    }
    public static Result success(Object data) {
        Result result = new Result();
        result.setCode("200");
        result.setData(data);
        result.setMsg("请求成功");
        return result;
    }
    public static Result error(String msg) {
        Result result = new Result();
        result.setCode("500");
        result.setMsg(msg);
        return result;
    }
    public static Result error(String code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

更改返回的数据形式

六、500 错误:常见的系统的错误

抛出这些错误非常不友好,我们应该使用统一的处理方式

配置日志

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

@ControllerAdvice("com.qcby.springboot.controller")
public class GlobalExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    @ExceptionHandler(Exception.class)
    @ResponseBody // 将result对象转换成 json的格式
    public Result error(Exception e) {
        log.error("系统异常", e);
        return Result.error("系统异常");
    }
}

系统异常怎么办

你得看你的控制台,然后找到报错的代码位置,具体去修正代码

自定义异常

/**
 * 自定义异常
 * 运行时异常
 */
public class CustomerException extends RuntimeException {
    private String code;
    private String msg;
    public CustomerException(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public CustomerException(String msg) {
        this.code = "500";
        this.msg = msg;
    }
    public CustomerException() {}
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

最终版全局异常

/**
 * 全局异常捕获器
 * @ControllerAdvice("com.qcby.springboot.controller") 
 *                 指定该全局异常处理器作用于 com.qcby.springboot.controller 包下的控制器。
 */
@ControllerAdvice("com.qcby.springboot.controller")
public class GlobalExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    /**
     * 全局异常捕获器
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)  
    @ResponseBody // 将result对象转换成 json的格式
    public Result error(Exception e) {
        log.error("系统异常", e);
        return Result.error("系统异常");
    }
    /**
     * 自定义异常捕获器
     * @param e
     * @return
     */
    @ExceptionHandler(CustomerException.class)
    @ResponseBody // 将result对象转换成 json的格式
    public Result customerError(CustomerException e) {
        log.error("自定义错误", e);
        return Result.error(e.getCode(), e.getMsg());
    }
}

测试自定义异常

controller测试接口

@GetMapping("/admin")
public Result admin(String name) {
    String admin = adminService.admin(name);
    return Result.success(admin);
}

service

package com.example.service;
import com.example.exception.CustomerException;
import org.springframework.stereotype.Service;
@Service
public class AdminService {
    public String admin(String name) {
        if ("admin".equals(name)) {
            return "admin";
        } else {
            throw new CustomerException("账号错误");
        }
    }
}

到此这篇关于SpringBoot3 框架快速搭建与项目工程详解的文章就介绍到这了,更多相关SpringBoot内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现定制数据透视表的示例详解

    java实现定制数据透视表的示例详解

    数据透视表(Pivot Table)是一种数据分析工具,通常用于对大量数据进行汇总、分析和展示,本文主要介绍了如何使用Java将计算项添加到数据透视表中,感兴趣的可以了解下
    2023-12-12
  • Json字符串转Java对象和List代码实例

    Json字符串转Java对象和List代码实例

    这篇文章主要介绍了Json字符串转Java对象和List代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 深入了解Java线程池的原理和监控

    深入了解Java线程池的原理和监控

    这篇文章主要介绍了深入了解Java线程池的原理和监控,创建Java线程需要给线程分配堆栈内存以及初始化内存,还需要进行系统调用,频繁地创建和销毁线程会大大降低系统的运行效率,这时候就要用到线程池,需要的朋友可以参考下
    2023-07-07
  • Java实现顺序栈的示例代码

    Java实现顺序栈的示例代码

    线性表和栈都是我们常用的数据结构,栈可以看成一种特殊状态的线性表。线性表分为顺序表和链表,使用线性表中的顺序表来实现栈时这种栈被称为顺序栈。这篇文章总结了如何使用顺序表实现栈,需要的可以参考一下
    2022-11-11
  • java通过反射创建对象并调用方法

    java通过反射创建对象并调用方法

    这篇文章主要介绍了java通过反射创建对象并调用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java学习手册之Filter和Listener使用方法

    Java学习手册之Filter和Listener使用方法

    这篇文章主要介绍了Java学习手册之Filter 和 Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servlet之前或响应返回客户端之前对请求和响应进行拦截和处理,Listener用于监听JavaWeb应用中的各种事件,需要的朋友可以参考下
    2025-04-04
  • 使用Java代码进行因数分解和求最小公倍数的示例

    使用Java代码进行因数分解和求最小公倍数的示例

    这篇文章主要介绍了使用Java代码进行因数分解和求最小公倍数的示例,都是基于最基础的算法原理实现,需要的朋友可以参考下
    2015-11-11
  • springboot项目账户注册逻辑功能实现

    springboot项目账户注册逻辑功能实现

    这篇文章主要介绍了springboot项目账户注册逻辑功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • 深入理解Java设计模式之简单工厂模式

    深入理解Java设计模式之简单工厂模式

    这篇文章主要介绍了JAVA设计模式之简单工厂模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2021-11-11
  • Java 压缩包解压实现代码

    Java 压缩包解压实现代码

    Java标准库(Java SE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RAR压缩包,感兴趣的朋友一起看看吧
    2025-05-05

最新评论