Spring Boot入门教程:60分钟快速上手

许秀兰
2025-06-16 12:27
阅读 321

引言:一个真实项目中的“技术救火”

引言:一个真实项目中的“技术救火”

去年,我在公司接手了一个比较紧急的小项目——为市场部搭建一个客户信息收集和展示的后台系统。时间紧迫,前后端都要一起搞,而我们团队后端这边只有我一个人,还要求在三天内拿出可运行的原型给老板看。

当时第一反应就是:用Spring Boot!因为它的核心理念“开箱即用”、自动配置、快速构建,正好能满足这种短平快的需求。而且我也刚好在之前的一个小项目里试过水,效果还不错。

接下来的两个小时,我把一个基于Spring Boot + MyBatis + Vue的原型搭了起来,包括数据库结构、接口设计、基础增删改查功能。后来再花了一天做了一些扩展,整个系统居然跑起来了。

今天我就结合这个真实的开发过程,分享一下如何在60分钟内用Spring Boot完成一个基本可用的后端系统,希望能让刚接触Spring Boot的朋友少走弯路,也能让有经验的同学看看我在实战中是怎么使用的。


项目背景与目标

项目背景与目标

我们要做的系统其实很简单:一个客户信息管理后台

  • 客户可以注册(录入姓名、电话、城市、意向产品)
  • 支持查询所有客户信息
  • 支持按城市筛选
  • 暴露RESTful接口供前端调用

虽然需求看着不大,但要在一个小时内搞定,就需要借助Spring Boot来加速开发。


遇到的挑战

遇到的挑战

说实话,在接到任务的时候我心里也有点打鼓:

  1. 时间太紧,传统SSM框架(Spring + Spring MVC + MyBatis)可能不够快。
  2. 我不希望重复造轮子,比如写Controller、DAO层模板代码。
  3. 需要快速调试API,最好能带一个内置的HTTP客户端。
  4. 要支持热部署,方便修改代码不停机调试。

这四个问题要是解决不好,别说一个小时,半天都不够干。


技术选型与整体架构

考虑到项目周期短、结构简单,我最终决定采用如下技术栈:

  • Spring Boot 2.7.x
  • JDK 11
  • MyBatis Plus(简化CRUD操作)
  • MySQL 8.x
  • Swagger UI(文档+测试接口)
  • Lombok(减少样板代码)

架构方面也非常简单:

Client (Vue) --> Spring Boot API --> MySQL

Spring Boot本身自带嵌入式Tomcat,所以部署非常方便,本地直接启动即可,不需要额外配置服务器。


快速搭建步骤详解(关键代码示例)

第一步:使用Spring Initializr创建基础项目

访问 https://start.spring.io,选择以下依赖项:

  • Spring Web
  • Spring Data JPA(这里我用了MyBatis Plus,但JPA是基础组件之一)
  • MyBatis Framework
  • MySQL Driver
  • Lombok
  • Swagger2(用于接口文档)

点击Generate下载项目,解压后导入IDE(推荐使用IntelliJ IDEA或者VS Code加Java插件)。

第二步:配置application.yml文件

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/customer_db?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    mapUnderscoreToCamelCase: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL语句

swagger:
  enabled: true

第三步:建立数据库表结构

我只建了一张表,用来存客户信息:

CREATE TABLE `customer` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) DEFAULT NULL,
  `phone` VARCHAR(20) DEFAULT NULL,
  `city` VARCHAR(50) DEFAULT NULL,
  `product_interest` VARCHAR(100) DEFAULT NULL,
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

第四步:编写实体类 & Mapper

使用Lombok和MyBatis Plus大大简化了代码量:

Customer.java

import lombok.Data;

@Data
public class Customer {
    private Long id;
    private String name;
    private String phone;
    private String city;
    private String productInterest;
    private Date createTime;
}

CustomerMapper.java

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface CustomerMapper extends BaseMapper<Customer> {
}

第五步:编写Service层逻辑

import org.springframework.stereotype.Service;

@Service
public class CustomerService {

    @Autowired
    private CustomerMapper customerMapper;

    public List<Customer> getAllCustomers() {
        return customerMapper.selectList(null);
    }

    public List<Customer> getCustomersByCity(String city) {
        return customerMapper.selectList(new QueryWrapper<Customer>().eq("city", city));
    }

    public void addCustomer(Customer customer) {
        customerMapper.insert(customer);
    }
}

第六步:编写Controller层接口

@RestController
@RequestMapping("/api/customers")
@CrossOrigin // 允许跨域请求,适用于Vue等前端项目
public class CustomerController {

    @Autowired
    private CustomerService customerService;

    @GetMapping
    public ResponseEntity<List<Customer>> getAllCustomers() {
        return ResponseEntity.ok(customerService.getAllCustomers());
    }

    @GetMapping("/{city}")
    public ResponseEntity<List<Customer>> getCustomersByCity(@PathVariable String city) {
        return ResponseEntity.ok(customerService.getCustomersByCity(city));
    }

    @PostMapping
    public ResponseEntity<Void> createCustomer(@RequestBody Customer customer) {
        customerService.addCustomer(customer);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
}

第七步:集成Swagger文档

添加配置类启用Swagger:

@Configuration
@EnableOpenApi
public class SwaggerConfig {}

然后就可以通过访问 /swagger-ui.html 看到自动生成的接口文档,并且可以直接发送请求进行测试!


踩坑记录 & 经验总结

虽然是个小项目,但在实际开发过程中还是踩了不少坑:

坑1:MyBatis Plus字段映射问题

起初我把Java实体类里的字段命名为productInterest,但是数据库是product_interest。默认情况下MyBatis不会自动做驼峰转下划线。解决办法是在application.yml中加入:

mapUnderscoreToCamelCase: true

当然也可以手动加上注解@TableId(value = "product_interest"),不过对于大多数字段来说还是统一处理更省事。

坑2:Swagger无法访问

刚开始生成文档时一直报错404,后来发现是路径不对。如果你用的是Spring Boot 2.6及以上,Swagger访问地址会变成/swagger-ui/index.html而不是之前的/swagger-ui.html。注意区分版本差异。

坑3:POST请求JSON解析异常

这是最常见的坑了。有时候传递的JSON字段名跟实体类的setter名称对不上,会导致反序列化失败。检查字段命名是否规范,使用Lombok的@Data注解能避免很多类似问题。


效果与收益

按照上面的流程,我大概花了45分钟就完成了整个项目的搭建,剩下的时间做一些优化和补充测试数据,整个系统就能正常运行了。

  • 接口文档清晰(Swagger UI)
  • 可以直接对接前端页面
  • 数据库结构简洁合理
  • 部署非常方便,只需要打个jar包丢到服务器上就行

老板看了之后非常满意,市场部同事也觉得挺实用,后续还拓展了权限管理和Excel导出功能,全靠这个快速启动的基础。


实战建议 & 注意事项

作为一名经历过多个Spring Boot项目的开发者,我想给新手几个建议:

1. 学会用starter,别自己造轮子

Spring Boot的核心优势就是starter机制。比如你想连接Redis,引入spring-boot-starter-data-redis就可以了,不要再去自己封装连接池、配置参数之类的。

2. 合理使用自动配置,避免过度魔性

虽然Spring Boot做了大量自动装配,但我们也要懂背后的原理。遇到问题能看懂日志、知道从哪里入手调试才是关键。

3. 使用Actuator监控健康状态

生产环境一定记得加上Actuator模块,暴露健康检查、线程池、内存使用情况等重要指标。

management:
  endpoints:
    web:
      exposure:
        include: "*"

4. 多用Devtools加快调试

引入spring-boot-devtools后,只要保存代码就会自动重启服务(如果改动的是非配置类),极大提升开发效率。

5. 接口设计要规范

即使是内部系统,接口设计也要遵循RESTful原则,命名清晰、结构统一、返回格式标准化(如统一使用Result包装)。


写在最后:Spring Boot不是银弹,但它是快枪手

这篇文章讲的是我亲身经历的一个小项目,Spring Boot的确帮助我节省了很多时间,也让我更专注在业务逻辑上。但它也不是万能的,比如面对高并发、复杂业务场景时,仍然需要搭配消息队列、缓存、分布式事务等更多高级组件。

但作为初学者入门Java后端开发,或者需要快速实现一个原型系统时,Spring Boot绝对是首选工具。希望这篇来自一线开发者的经验分享,能帮你迈出第一步。

Happy coding~ 🚀

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝