首页/阶段四 · Java 后端大脑
4 第 8~11 周 · 后端大脑

Java + Spring Boot:真正处理业务的那台机器

前端要的数据从哪来?就是这里。学会 Java 基础、Controller→Service→Mapper 分层、MyBatis Plus 查库、SQL,你就能顺着一个接口从头追到数据库,看懂一条数据是怎么来的。

建议 4 周 前提:懂编程基础概念 目标:从接口追到数据库

本页目录

🧠先说人话:后端到底在忙啥

前端把请求发过来后,后端要做这些事:确认你有没有权限 → 校验数据对不对 → 算业务逻辑(比如算总价、扣库存)→ 去数据库存 / 取 → 把结果打包返回。这些「看不见但要命」的活儿,都在 Java 后端。

比喻:前端是餐厅大堂,后端是后厨。客人(前端)报了菜名,后厨接单、备料、掌勺、装盘,再让服务员端出去。菜好不好吃、干不干净,全看后厨。
工具变化:写 Java 一般用 IntelliJ IDEA(不是 VS Code),用 Maven 管理依赖(相当于前端的 npm),启动命令类似 mvn spring-boot:run
1

Java 基础

和 JavaScript 思路相通,但更「一板一眼」:所有东西都要先声明类型、都要放进「类」里。

📐类和对象:图纸与实物

比喻:类(class)是「图纸」,对象是照图纸造出来的「实物」。一张「用户」图纸,能造出张三、李四很多个用户对象。
// 定义一个「用户」类(图纸)
public class User {
    private Long id;        // 字段都要写明类型
    private String name;
    private Integer age;
    // ... getter / setter(IDEA 一键生成,不用手写)
}

// 用图纸造一个对象(实物)
User u = new User();
u.setName("张三");

常用集合:List 和 Map

// List = 一排有序的东西,相当于 JS 的数组
List<String> names = new ArrayList<>();
names.add("张三");

// Map = 键值对,相当于 JS 的对象
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
对比记忆:JS 的数组 ≈ Java 的 List;JS 的对象 ≈ Java 的 Map 或「类」。有了 JS 底子,Java 上手会快很多,主要是「更啰嗦、要写类型」。
2

三层分层架构(后端的骨架)

这是整个阶段最重要的一节。看懂这三层怎么配合,你就看懂了 90% 的后端代码结构。

🏢Controller → Service → Mapper

餐厅比喻:
Controller = 服务员:在门口接单,把前端请求接进来,再把结果端出去。
Service = 厨师:真正干活的,处理业务逻辑(算钱、判断、组合数据)。
Mapper = 仓管员:只负责去数据库存取食材,不管业务。
前端请求 Controller 接住 交给 Service 处理业务 Mapper 查数据库 数据原路返回 Controller 返回给前端

为什么要分三层?

  • 各管一段,好维护。改业务逻辑只动 Service,改数据库查询只动 Mapper,互不干扰。
  • 好定位。出问题时,你能快速判断是「接口没接对(Controller)、算错了(Service)、还是数据取错了(Mapper)」。
读代码的路线图:想搞懂一个功能,永远按 Controller → Service → Mapper 这个顺序往下追,一层层剥开,思路特别清晰。
3

Spring Boot 注解

那些 @ 开头的东西叫「注解」。别怕,它们就是「贴给 Spring 看的标签」。

🔖注解 = 给代码贴的功能标签

比喻:注解像贴在员工身上的工牌。贴上「服务员」工牌,Spring 就知道该让他去门口接单;贴上「这是接口地址」标签,Spring 就知道该把哪个请求交给他。
@RestController              // 工牌:我是个「服务员」(接口类)
@RequestMapping("/user")     // 我负责所有 /user 开头的请求
public class UserController {

    @Autowired                // 自动把 Service「递」给我用,不用自己 new
    private UserService userService;

    @GetMapping("/list")      // GET /user/list 这个请求归我管
    public Result list() {
        return userService.getList();
    }
}
注解大白话
@RestController这个类是「接口层」,负责接前端请求
@RequestMapping规定这个类 / 方法对应哪个网址
@GetMapping / @PostMapping对应前端的 GET / POST 请求
@Autowired / @Resource「自动把某个组件递给我用」,省去手动创建
@Service / @Mapper标记这是 Service 层 / Mapper 层
心态:注解一开始看着神秘,其实就是「配置」。你不用懂它内部怎么实现,先记住「这个 @ 是干嘛用的」就够上手。
4

MyBatis Plus 操作数据库

Mapper 层用它跟数据库打交道。好消息:常见的增删改查,一行 SQL 都不用写。

🔌把「表」和「Java 类」对上号

数据库里有张 user 表,Java 里有个 User 类,MyBatis Plus 帮你把它俩自动对应起来。你操作 Java 对象,它自动翻译成数据库操作。

// Mapper 接口,继承 BaseMapper 就白送一堆方法
public interface UserMapper extends BaseMapper<User> {
}
// Service 里直接调,不用写 SQL:
userMapper.selectById(1);          // 查 id=1 的用户
userMapper.insert(user);            // 新增
userMapper.updateById(user);        // 改
userMapper.deleteById(1);          // 删

// 带条件查询:查 age > 18 的用户
userMapper.selectList(
  new QueryWrapper<User>().gt("age", 18)
);
selectByIdinsert 这些是白送的。复杂查询才需要自己写 SQL(写在 XML 文件里),入门阶段先看懂这些现成方法即可。
5

数据库 SQL 基础

数据最终都存在数据库的「表」里。表 = 一张 Excel:有列(字段)、有行(每条数据)。

🗄️四个最核心的 SQL 命令

-- 查:从 user 表里查名字叫张三的
SELECT * FROM user WHERE name = '张三';

-- 增:插入一条新数据
INSERT INTO user (name, age) VALUES ('李四', 20);

-- 改:把 id=1 的年龄改成 26
UPDATE user SET age = 26 WHERE id = 1;

-- 删:删掉 id=1 的数据
DELETE FROM user WHERE id = 1;
血泪提醒:UPDATE / DELETE 一定要带 WHERE 条件!否则会改 / 删掉整张表所有数据,属于经典事故。

表关系:数据分开存,用 id 关联

用户表存用户、订单表存订单,订单里放一个 user_id 指向是谁下的单。查「某人的所有订单」时把两张表关联(JOIN)起来。

入门先会单表增删改查就行。多表 JOIN、事务这些遇到具体业务再深入。
6

统一返回「信封」

后端返回给前端的数据,通常都套一个固定格式,方便前端统一处理。

✉️不管什么接口,都装进同一个信封

比喻:无论寄什么东西,都用同一款标准快递盒,盒子外面固定印着「是否送达、里面是啥、备注」。前端一看盒子就知道怎么拆。
// 后端返回的统一结构(示意)
{
  "code": 200,        // 状态码:200 成功,500 出错
  "message": "成功",    // 给人看的提示语
  "data": { ... }      // 真正的数据在这里
}
// 后端代码里通常这么返回
return Result.success(userList);   // 成功,带上数据
return Result.error("用户不存在");   // 失败,带上提示
前后端对上了:还记得阶段二里前端拿到的 res.data 吗?后端返回的这个信封,就是前端 res.data 收到的东西。前端从 data.data 里取真正的数据,从 data.code 判断成没成功。一条线终于闭环了。
7

串起来看:一次请求的完整旅程

把前四阶段学的全串一遍,这就是全栈的全貌。

🔄用户点一下「查用户列表」,背后发生了什么

前端:用户点按钮,Vue 调用 api/user.ts 里的 getUserList(),Axios 发出 GET /user/list
Controller:后端 UserController 上贴着 @GetMapping("/list"),接住这个请求。
Service:Controller 把活交给 UserService,它处理业务逻辑。
Mapper:Service 让 UserMapper 去数据库 SELECT * FROM user,拿到数据。
装信封:数据一层层返回到 Controller,用 Result.success(list) 装进统一信封。
前端显示:Axios 拿到信封(res.data),取出 data,用 v-for 渲染成表格。用户看到列表。
看懂这 6 步,你就真正理解「全栈」了——这条从按钮到数据库再回到界面的线,就是所有功能的共同套路。

阶段目标 · 自我验收

🎯 过关标准

面对一个 Java 后端项目,你能——

读懂一个类、一个方法、List / Map 的基本用法
拿着前端记下的接口地址(如 /user/list),在后端找到对应的 Controller
顺着 Controller → Service → Mapper 一路追下去,看懂数据怎么来的
看懂 MyBatis Plus 的增删改查,能读简单 SQL
看懂统一返回信封,知道前端拿到的数据长啥样
能改一个简单接口(比如给返回结果多加一个字段)
到这里,前端后端你都能看懂、能小改了。最后一阶段,把它们真正「连起来跑通 + 上线」。