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("账号错误");
        }
    }

}
相关推荐
子云之风2 小时前
LSPosed 项目编译问题解决方案
java·开发语言·python·学习·android studio
小北方城市网2 小时前
SpringBoot 全局异常处理与接口规范实战:打造健壮可维护接口
java·spring boot·redis·后端·python·spring·缓存
独自破碎E2 小时前
什么是Spring IOC
java·spring·rpc
lendsomething2 小时前
graalvm使用实战:在java中执行js脚本
java·开发语言·javascript·graalvm
烤麻辣烫2 小时前
java进阶--刷题与详解-2
java·开发语言·学习·intellij-idea
期待のcode2 小时前
性能监控工具
java·开发语言·jvm
Chan162 小时前
【 微服务SpringCloud | 方案设计 】
java·spring boot·微服务·云原生·架构·intellij-idea
小屁猪qAq2 小时前
设计模式总纲
开发语言·c++·设计模式
不绝1912 小时前
C#核心:多态
开发语言·c#