Java 后端速通
Java 后端速通
前端要的数据从哪来?就是这里。学会 Java 基础、Controller→Service→Mapper 分层、MyBatis Plus 查库、SQL,你就能顺着一个接口从头追到数据库,看懂一条数据是怎么来的。
先说人话:后端到底在忙啥
前端把请求发过来后,后端要做这些事:确认你有没有权限 → 校验数据对不对 → 算业务逻辑(比如算总价、扣库存)→ 去数据库存 / 取 → 把结果打包返回。这些「看不见但要命」的活儿,都在 Java 后端。
💡 比喻: 前端是餐厅大堂,后端是后厨。客人(前端)报了菜名,后厨接单、备料、掌勺、装盘,再让服务员端出去。菜好不好吃、干不干净,全看后厨。
工具变化
写 Java 一般用 IntelliJ IDEA(不是 VS Code),用 Maven 管理依赖(相当于前端的 npm)。下一节就带你装齐。
装环境 & 创建你的第一个后端项目
后端「三件套」:JDK(Java 本体)、IDEA(编辑器)、MySQL(数据库)。装好后用官方工具一键生成项目。
第一步:装三样东西
| 装什么 | 它是啥 | 装好的标志 |
|---|---|---|
| JDK(选 17 或 21) | Java 语言本体 + 运行环境 | 命令行敲 java -version 出版本号 |
| IntelliJ IDEA(社区版免费够用) | 写 Java 的编辑器,Java 界的 VS Code | 能打开、能新建项目 |
| MySQL(顺手装个 Navicat / DBeaver 图形工具) | 数据库本体 + 可视化管理工具 | 图形工具能连上本机数据库 |
提示
每一样的安装教程网上都很多,跟着最新的一篇走即可;装的过程有报错就发给 AI(参看 AI 速通)。这一步可能要折腾半天到一天,是正常的,别怀疑自己。
第二步:用 Spring Initializr 生成项目
Spring 官方提供了「项目生成器」start.spring.io(IDEA 里新建项目也内置了它),点几下就能生成一个能跑的后端工程:
- 打开 start.spring.io(或 IDEA → New Project → Spring Boot),语言选 Java,构建工具选 Maven。
- 依赖(Dependencies)勾上:Spring Web(写接口用)、MySQL Driver(连数据库用)。
- 生成、下载、用 IDEA 打开,等它把依赖下载完(右下角有进度条)。
- 点绿色三角运行。控制台出现
Started ... Application就是跑起来了,默认在localhost:8080。
MyBatis Plus 什么时候加
学到第 6 节要连数据库时,往 pom.xml 里加它的依赖即可(AI 或官网会给你现成的几行配置)。现在先让空项目跑起来。
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 上手会快很多,主要是「更啰嗦、要写类型」。
三层分层架构(后端的骨架)
这是整个阶段最重要的一节。看懂这三层怎么配合,你就看懂了 90% 的后端代码结构。
Controller → Service → Mapper
💡 餐厅比喻:Controller = 服务员:在门口接单,把前端请求接进来,再把结果端出去。 Service = 厨师:真正干活的,处理业务逻辑(算钱、判断、组合数据)。 Mapper = 仓管员:只负责去数据库存取食材,不管业务。
为什么要分三层?
- 各管一段,好维护。改业务逻辑只动 Service,改数据库查询只动 Mapper,互不干扰。
- 好定位。出问题时,你能快速判断是「接口没接对(Controller)、算错了(Service)、还是数据取错了(Mapper)」。
读代码的路线图
想搞懂一个功能,永远按 Controller → Service → Mapper 这个顺序往下追,一层层剥开,思路特别清晰。
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 层 |
心态
注解一开始看着神秘,其实就是「配置」。你不用懂它内部怎么实现,先记住「这个 @ 是干嘛用的」就够上手。
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)
);提示
selectById、insert 这些是白送的。复杂查询才需要自己写 SQL(写在 XML 文件里),入门阶段先看懂这些现成方法即可。
数据库 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、事务这些遇到具体业务再深入。
统一返回「信封」
后端返回给前端的数据,通常都套一个固定格式,方便前端统一处理。
不管什么接口,都装进同一个信封
💡 比喻: 无论寄什么东西,都用同一款标准快递盒,盒子外面固定印着「是否送达、里面是啥、备注」。前端一看盒子就知道怎么拆。
// 后端返回的统一结构(示意)
{
"code": 200, // 状态码:200 成功,500 出错
"message": "成功", // 给人看的提示语
"data": { ... } // 真正的数据在这里
}// 后端代码里通常这么返回
return Result.success(userList); // 成功,带上数据
return Result.error("用户不存在"); // 失败,带上提示前后端对上了
还记得前端速通《Vue 3 入门》篇里前端拿到的 res.data 吗?后端返回的这个信封,就是前端 res.data 收到的东西。前端从 data.data 里取真正的数据,从 data.code 判断成没成功。一条线终于闭环了。
串起来看:一次请求的完整旅程
把前面各篇学的全串一遍,这就是全栈的全貌。
用户点一下「查用户列表」,背后发生了什么
提示
看懂这 6 步,你就真正理解「全栈」了——这条从按钮到数据库再回到界面的线,就是所有功能的共同套路。
动手实践 · 亲手写一套「用户」接口
在你用 Spring Initializr 建的项目里,从建表到接口跑通,完整走一遍三层架构。
跟着做(这是本阶段的重头戏)
- 建库建表。用 Navicat / DBeaver 新建一个数据库,建一张
user表,加几个字段(id、name、age),手动塞两三条测试数据进去。 - 连上数据库。在项目的
application.yml里填数据库地址、账号、密码。启动项目不报连接错误就算连上了。 - 加 MyBatis Plus。往
pom.xml加它的依赖(照官网 / AI 给的几行)。刷新 Maven,让 IDEA 把包下下来。 - 写 Mapper。建
User类对应表,建UserMapper extends BaseMapper<User>——查询能力就白送了。 - 写 Service。建
UserService,写一个「查所有用户」的方法,内部调userMapper.selectList(null)。 - 写 Controller。建
UserController,加@GetMapping("/user/list"),调 Service,把结果return出去。 - 测试接口。启动项目,浏览器直接访问
http://localhost:8080/user/list(或用 Postman)——看到你塞进数据库的用户数据以 JSON 形式返回了。这一刻,你的后端活了。 - 再加一个新增接口。照葫芦画瓢写
@PostMapping+userMapper.insert(),用 Postman 发一条 POST,去数据库看数据真的多了一条。 - Git 存档。老规矩,
init → add → commit。
做完这个,你就打通了整条后端链路
再回头看《前端进阶》篇记下的那些接口 url,你已经完全明白它们在后端是怎么被处理的了。
什么才算合格
合格标准
- 环境:JDK / IDEA / MySQL 都装好,能用 Spring Initializr 独立建一个能跑的项目
- 看得懂 Java:读懂一个类、一个方法、List / Map 的基本用法
- 懂分层:能说清 Controller / Service / Mapper 各干什么,会按这个顺序追代码
- 会查库:看懂 MyBatis Plus 的增删改查,能读并写简单 SQL
- 能实操:上面的「用户接口」实践真的做通了,浏览器 / Postman 能拿到数据库的数据
- 能新增:能自己照着写一个新的接口(比如按 id 查单个用户)
- 口头测试:能完整讲出「一次请求从前端到数据库再回来」的 6 步旅程
没达标怎么办
后端最大的拦路虎是「环境和连接问题」(数据库连不上、依赖下不动、端口冲突),这些几乎都能靠「复制报错问 AI」解决,别硬扛。接口写不通就先只做「查列表」一个,跑通了再加别的。到这里前后端你都能动手了,最后一阶段把它们真正连起来上线。