目录
第一层:控制层(Controller)—— 负责接请求、给响应
第二层:业务层(Service)—— 负责写逻辑、调数据库
第三层:数据库层(Mapper)—— 负责直接跟表打交道
第四层:启动与配置类(Spring Boot 核心)
第五层:Lombok
📝 三层对照
🧓 实操例子
分成三层来记,控制层(Controller)→ 业务层(Service)→ 数据库层(Mapper),这样思路最清晰。
第一层:控制层(Controller)—— 负责接请求、给响应
|
注解 |
作用 |
位置 |
生动解释 |
|
@RestController |
标记这是一个控制器,且所有方法都返回JSON |
类上面 |
跟浏览器说:我这是接待处,而且只说JSON语言 |
|
@RequestMapping |
设置访问路径的“根目录” |
类上面 |
给整个接待处挂个门牌号,比如 /api |
|
@GetMapping |
只能处理 GET 请求(查) |
方法上面 |
专门接待“想看看”的客人 |
|
@PostMapping |
只能处理 POST 请求(增) |
方法上面 |
专门接待“想交资料”的客人 |
|
@PutMapping |
只能处理 PUT 请求(改) |
方法上面 |
专门接待“想改资料”的客人 |
|
@DeleteMapping |
只能处理 DELETE 请求(删) |
方法上面 |
专门接待“想删资料”的客人 |
|
@PathVariable |
接收路径里的参数,比如 /user/1 里的 1 |
方法参数上 |
从门牌号里把数字摘出来 |
|
@RequestParam |
接收?号后面的参数,比如 ?name=张三 |
方法参数上 |
从问号后面把值摘出来 |
|
@RequestBody |
接收前端传来的JSON对象 |
方法参数上 |
把客人递过来的一整张表拆开 |
第二层:业务层(Service)—— 负责写逻辑、调数据库
|
注解 |
作用 |
位置 |
|
@Service |
标记这是一个业务处理类 |
类上面 |
|
@Autowired |
自动把别的组件“拿过来”用 |
字段/构造方法上 |
|
@Transactional |
开启数据库事务(要么全成功,要么全撤销),避免脏数据 |
方法/类上面 |
第三层:数据库层(Mapper)—— 负责直接跟表打交道
|
注解 |
作用 |
位置 |
|
@Mapper |
标记这是一个数据库操作接口 |
接口上面 |
|
@TableName |
指定这个实体类对应哪张表 |
实体类上面 |
|
@TableId |
标记哪个字段是主键 |
实体类字段上 |
|
@TableField |
标记字段对应表的哪一列 |
实体类字段上 |
第四层:启动与配置类(Spring Boot 核心)
|
注解 |
作用 |
位置 |
|
@SpringBootApplication |
启动类专用,包含了三大注解 |
启动类上 |
|
@Configuration |
标记这是一个配置类 |
类上面 |
|
@Bean |
把方法返回的对象交给Spring管理 |
配置类里的方法上 |
第五层:Lombok
|
注解 |
作用 |
位置 |
例子 |
|
@Data |
最常用! 一键生成getter/setter/toString等 |
实体类上 |
|
|
@AllArgsConstructor |
生成全参数的构造方法 |
实体类上 |
|
|
@NoArgsConstructor |
生成无参数的构造方法 |
实体类上 |
|
|
@Builder |
支持链式调用 |
实体类上 |
User user = User.builder() .id(1L) .username("张三") .password("123") .age(20) .build(); |
📝 三层对照
|
层级 |
类上面贴 |
方法上面贴 |
参数上面贴 |
|
控制层 |
@RestController + @RequestMapping |
@GetMapping / @PostMapping… |
@PathVariable / @RequestParam / @RequestBody |
|
业务层 |
@Service |
@Transactional |
@Autowired 自动注入 |
|
数据库层 |
@Mapper |
(MyBatis-Plus自动生成) |
(MyBatis-Plus自动生成) |
🧓 实操例子
// ———- 实体类 (Lombok + MyBatis-Plus) ———-
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private String password;
}
// ———- Mapper (数据库层) ———-
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 空着就行,MP自动提供增删改查
}
// ———- Service (业务层) ———-
@Service
public class UserService {
@Autowired
private UserMapper userMapper; // 把Mapper拿过来用
public User getById(Long id) {
return userMapper.selectById(id);
}
}
// ———- Controller (控制层) ———-
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
return userService.getById(id);
}
}
昨天的文章收获了一些点赞,作为初次尝试写博客的大学生来说真的好开心啊,感谢所有道友的鼓励!我将会持续更新我的学习与总结的❤



