Spring Boot入门教程:60分钟快速上手 —— 一个裸辞半年的前大厂程序员的自救笔记

算法Web
2025-12-14 14:39
阅读 707

作者:李工,前某一线大厂后端开发,现居北京天通苑,房租3500/月,正在重新找工作。


上周五晚上十一点,我窝在天通苑那张吱呀作响的二手宜家书桌前,一边啃着冷掉的炸鸡,一边盯着屏幕上不断报错的 Whitelabel Error Page。老婆在隔壁房间轻声问我:“还没搞定?明天不是要投简历了吗?”

我苦笑了一下:“快了,就差一个接口联调……”

其实哪是“快了”,根本就是卡死了。前端同事(哦不,现在是我自己)写的 Vue 页面死活收不到后端返回的 JSON 数据。那一刻,我真的有点想砸键盘——裸辞半年,技术生疏到连个 Hello World 都跑不利索了

但你知道吗?就在那个凌晨两点的崩溃时刻,我突然意识到:Spring Boot 这东西,其实没那么难。只要搞清楚几个关键点,60 分钟真能上手做出一个前后端联调的小项目。今天这篇文章,就是写给和我一样——曾经在大厂写过几年 Java,但 Gap 期荒废了技能、又急着重新杀回职场的兄弟姐妹们。


裸辞之后:从“架构师幻觉”到“连环境都配不好”

事情得从去年十月说起。

当时我在某头部互联网公司做后端,月薪22k,但每天加班到十点是常态。有天深夜打车回家,看到天通苑地铁站外排成长龙的共享单车,突然觉得:这日子不对劲。第二天我就跟领导提了离职,理由很中二:“我想找回写代码的初心。”

结果呢?Gap 第一个月还在刷 LeetCode、看《深入理解 JVM》,第二个月开始焦虑失眠,第三个月连 IDEA 都懒得打开了。等到今年三月春招启动,我才发现:市场变了,JD 上清一色写着“精通 Spring Cloud、熟悉微服务治理、有高并发经验”——而我连本地 Maven 仓库都好久没更新了。

更惨的是,面试官问:“你最近有做过什么项目吗?”
我支支吾吾:“呃……在家研究源码。”
对方礼貌一笑:“好的,我们再联系。”

现实狠狠给了我一巴掌:没有可演示的项目,简历就是一张废纸。

于是上周,我下定决心:用最短时间,做一个能跑起来的 Spring Boot + 前端小 demo,至少证明我还“活着”


60分钟实战:从零搭建一个 TodoList 应用

第一步:环境准备(5分钟)

别整那些花里胡哨的。打开 start.spring.io,选好:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.x(最新稳定版)
  • Dependencies: Spring Web, Spring Data JPA, H2 Database

为什么选 H2?因为不用装 MySQL!本地内存数据库,重启即清空,完美适合练手。

下载 zip 包,解压,用 IDEA 打开。别改任何配置,直接点运行按钮。如果控制台出现 Tomcat started on port(s): 8080,恭喜,你已经赢了 50% 的人。

内心 OS:以前在公司,光申请开发机权限就要走三天流程,现在自己电脑上 5 分钟跑起服务,爽!


第二步:写个 Controller(10分钟)

src/main/java/com/example/demo 下新建 TodoController.java

@RestController
@RequestMapping("/api/todos")
public class TodoController {

    @GetMapping
    public List<String> getAllTodos() {
        return Arrays.asList("买菜", "交房租", "改简历");
    }

    @PostMapping
    public String addTodo(@RequestBody Map<String, String> todo) {
        // 简化处理,实际应存入数据库
        return "Added: " + todo.get("content");
    }
}

启动应用,浏览器访问 http://localhost:8080/api/todos,看到 JSON 数组了吗?这就是你的第一个 RESTful API

吐槽:以前在大厂,光写个 Controller 要过 Code Review、单元测试覆盖率检查、安全扫描……现在?先跑起来再说!


第三步:加个前端页面(20分钟)

我知道你说:“我是后端,不会前端!” 别慌,用最简单的 HTML + Axios。

src/main/resources/static 下新建 index.html

<!DOCTYPE html>
<html>
<head>
    <title>我的待办清单</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
    <h1>Todo List</h1>
    <ul id="todo-list"></ul>
    <input type="text" id="new-todo" />
    <button onclick="addTodo()">添加</button>

    <script>
        function loadTodos() {
            axios.get('/api/todos')
                .then(res => {
                    const list = document.getElementById('todo-list');
                    list.innerHTML = '';
                    res.data.forEach(todo => {
                        const li = document.createElement('li');
                        li.textContent = todo;
                        list.appendChild(li);
                    });
                });
        }

        function addTodo() {
            const input = document.getElementById('new-todo');
            axios.post('/api/todos', { content: input.value })
                .then(() => {
                    input.value = '';
                    loadTodos();
                });
        }

        loadTodos(); // 页面加载时获取数据
    </script>
</body>
</html>

刷新 http://localhost:8080,一个丑但能用的 TodoList 出现了!前后端联调成功

真实感受:那一刻我差点哭出来——原来我还能写出能跑的代码!


第四步:接入数据库(25分钟)

前面的数据是假的,现在让它持久化。

  1. application.properties 中添加:

    spring.datasource.url=jdbc:h2:mem:testdb
    spring.h2.console.enabled=true
    
  2. 创建实体类 Todo.java

    @Entity
    public class Todo {
        @Id @GeneratedValue
        private Long id;
        private String content;
        // getter/setter 省略
    }
    
  3. 创建 Repository:

    public interface TodoRepository extends JpaRepository<Todo, Long> {}
    
  4. 修改 Controller,注入 Repository 并操作数据:

    @Autowired
    private TodoRepository todoRepo;
    
    @GetMapping
    public List<Todo> getAllTodos() {
        return todoRepo.findAll();
    }
    
    @PostMapping
    public Todo addTodo(@RequestBody Todo todo) {
        return todoRepo.save(todo);
    }
    

重启应用,访问 http://localhost:8080/h2-console(用户名 sa,密码留空),能看到数据表了!再试试前端页面,数据真的存进去了。

恭喜!你已掌握 Spring Boot 最核心的 CRUD 流程


为什么这60分钟对我如此重要?

说实话,在写这个 Demo 之前,我一度怀疑自己是不是不适合做程序员了。Gap 期间投了 87 份简历,只收到 3 个面试,还都挂在了“缺乏近期项目经验”这一关。

但做完这个小项目后,我做了三件事:

  1. 把代码传到 GitHub,README 写得明明白白;
  2. 录了个 2 分钟的屏幕操作视频,发到朋友圈;
  3. 在简历的“个人项目”栏加了一行:“基于 Spring Boot + Vue 的全栈 TodoList 应用”。

结果?三天内收到 5 个 HR 主动联系。昨天有个创业公司 CTO 直接说:“你这个项目虽然简单,但能看出你确实会动手,来聊聊吧?”


给同样在 Gap 期挣扎的你:几点真心话

  1. 别被“精通”吓住。企业要的不是神,而是能解决问题的人。一个能跑通的 Demo,比十篇“深入源码”文章更有说服力。

  2. 前端不用怕。现在的前端框架太友好了,Axios + 原生 JS 足够应付 80% 的联调场景。真不行,用 Thymeleaf 写服务端渲染也行啊!

  3. Java 生态依然坚挺。Spring Boot 是目前最平滑的 Java 入口,学它等于同时掌握了 Web 开发、数据库操作、REST API 设计——这些都是面试高频考点。

  4. 行动打败焦虑。我算过,每天花 1 小时写代码,一周就能做出一个像样的项目。而瘫在床上刷招聘软件,只会越刷越慌。


最后:关于天通苑、房租和未来

写完这篇教程时,已经是凌晨三点。窗外偶尔传来外卖电动车的声音,天通苑的夜从来不算安静。下个月房租又要交了,3500 块,占我存款的三分之一。

但我心里踏实多了。

因为我知道,只要还能写出能跑的代码,我就没被淘汰。Spring Boot 不是什么魔法,它只是一个工具——而工具,永远掌握在愿意动手的人手里。

如果你也在 Gap 期迷茫,请记住:别等“准备好”才开始,开始做了,你就准备好了

共勉。

P.S. 这个 TodoList 项目我开源了,GitHub 搜 gap-year-springboot-demo 就能找到。欢迎 Star,更欢迎 PR —— 说不定我们能在某个公司的会议室里,笑着聊起这段“天通苑自救史”。

评论 0

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