目录

第一层:控制层(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

标记当前类是Spring 配置类,项目启动时 Spring 会自动扫描这个类,执行里面@Bean修饰的方法,把对象放到容器里供你注入使用。

类上面

@Bean

把方法返回的对象交给Spring管理,@Autowired直接拿这个 Redis 操作对象。

配置类里的方法上


第五层: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);
    }
}

昨天的文章收获了一些点赞,作为初次尝试写博客的大学生来说真的好开心啊,感谢所有道友的鼓励!我将会持续更新我的学习与总结的❤

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐