前端要的数据从哪来?就是这里。学会 Java 基础、Controller→Service→Mapper 分层、MyBatis Plus 查库、SQL,你就能顺着一个接口从头追到数据库,看懂一条数据是怎么来的。
前端把请求发过来后,后端要做这些事:确认你有没有权限 → 校验数据对不对 → 算业务逻辑(比如算总价、扣库存)→ 去数据库存 / 取 → 把结果打包返回。这些「看不见但要命」的活儿,都在 Java 后端。
mvn spring-boot:run。// 定义一个「用户」类(图纸)
public class User {
private Long id; // 字段都要写明类型
private String name;
private Integer age;
// ... getter / setter(IDEA 一键生成,不用手写)
}
// 用图纸造一个对象(实物)
User u = new User();
u.setName("张三");
// List = 一排有序的东西,相当于 JS 的数组
List<String> names = new ArrayList<>();
names.add("张三");
// Map = 键值对,相当于 JS 的对象
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
List;JS 的对象 ≈ Java 的 Map 或「类」。有了 JS 底子,Java 上手会快很多,主要是「更啰嗦、要写类型」。Controller → Service → Mapper 这个顺序往下追,一层层剥开,思路特别清晰。@ 开头的东西叫「注解」。别怕,它们就是「贴给 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 层 |
数据库里有张 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 文件里),入门阶段先看懂这些现成方法即可。-- 查:从 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 条件!否则会改 / 删掉整张表所有数据,属于经典事故。用户表存用户、订单表存订单,订单里放一个 user_id 指向是谁下的单。查「某人的所有订单」时把两张表关联(JOIN)起来。
// 后端返回的统一结构(示意)
{
"code": 200, // 状态码:200 成功,500 出错
"message": "成功", // 给人看的提示语
"data": { ... } // 真正的数据在这里
}
// 后端代码里通常这么返回
return Result.success(userList); // 成功,带上数据
return Result.error("用户不存在"); // 失败,带上提示
res.data 吗?后端返回的这个信封,就是前端 res.data 收到的东西。前端从 data.data 里取真正的数据,从 data.code 判断成没成功。一条线终于闭环了。api/user.ts 里的 getUserList(),Axios 发出 GET /user/list。UserController 上贴着 @GetMapping("/list"),接住这个请求。UserService,它处理业务逻辑。UserMapper 去数据库 SELECT * FROM user,拿到数据。Result.success(list) 装进统一信封。res.data),取出 data,用 v-for 渲染成表格。用户看到列表。面对一个 Java 后端项目,你能——
/user/list),在后端找到对应的 ControllerController → Service → Mapper 一路追下去,看懂数据怎么来的