Spring Boot 开发接口指南

Spring Boot 开发接口指南

开发思路

写接口的本质是:Controller 接收请求 → Service 处理业务 → Mapper 操作数据库,三层各司其职。


1. Controller 层(接收请求)

java 复制代码
@RestController           // = @Controller + @ResponseBody(返回JSON)
@RequestMapping("/api")  // 路由前缀
public class UserController {

    @Autowired           // 注入 Service
    private UserService userService;
    
    // 路由注解
    @GetMapping("/user/{id}")      // GET 请求(查询)
    @PostMapping("/user")           // POST 请求(创建)
    @PutMapping("/user")           // PUT 请求(更新)
    @DeleteMapping("/user/{id}")    // DELETE 请求(删除)
    
    // 参数注解
    @PathVariable Long id           // 路径参数 /user/1
    @RequestBody @Valid User user   // 请求体 + 参数校验
    @RequestParam String name       // URL查询参数 ?name=xxx
    
    public Result<User> getUser(@PathVariable Long id) {
        User user = userService.getById(id);
        return Result.success(user);
    }
}

常用请求参数注解

注解 用途 示例
@PathVariable 路径参数 /user/{id}
@RequestBody JSON请求体 POST JSON数据
@RequestParam URL参数 ?page=1&size=10
@RequestHeader 请求头 获取Header信息

2. Service 层(业务逻辑)

java 复制代码
@Service  // 标记为业务层组件,自动纳入IOC容器
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getById(Long id) {
        // 业务逻辑处理
        return userMapper.findById(id);
    }
    
    public void addUser(User user) {
        // 参数校验、业务处理
        userMapper.insert(user);
    }
}

3. Mapper 层(数据访问)

MyBatis 写法

java 复制代码
@Mapper  // MyBatis 注解,自动生成Mapper实现
public interface UserMapper {
    
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);
    
    @Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")  // 自动生成主键
    void insert(User user);
    
    @Update("UPDATE user SET name = #{name} WHERE id = #{id}")
    void update(User user);
    
    @Delete("DELETE FROM user WHERE id = #{id}")
    void delete(Long id);
}

MyBatis-Plus 写法(更简洁)

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后,CRUD 自动生成
    // selectById, insert, updateById, deleteById 等方法自带
}

4. Entity 层(数据模型)

java 复制代码
@Data                     // Lombok:自动生成getter/setter/toString
@NoArgsConstructor        // 无参构造
@AllArgsConstructor       // 全参构造
@TableName("sys_user")   // 指定表名(可选,不指定默认用类名)
public class User {
    
    @TableId(type = IdType.AUTO)  // 主键自增
    private Long id;
    
    private String name;
    
    private String email;
    
    @TableField(fill = FieldFill.INSERT)  // 自动填充
    private LocalDateTime createTime;
}

核心注解一览

Controller 层

注解 作用
@RestController 声明REST接口(返回JSON)
@Controller 声明控制器(返回视图)
@RequestMapping 通用路由映射
@GetMapping GET请求
@PostMapping POST请求
@PutMapping PUT请求
@DeleteMapping DELETE请求

Bean 声明

注解 作用 使用场景
@Component 通用组件 通用Bean
@Service 业务层 Service类
@Repository 数据层 Mapper/Dao类
@Controller 控制器 Controller类
@Configuration 配置类 配置类

依赖注入

注解 作用
@Autowired 按类型注入(Spring)
@Resource 按名称注入(JDK)
@Qualifier 指定具体Bean名称

数据层

注解 作用
@Mapper 声明MyBatis Mapper
@TableName 指定表名
@TableId 主键映射
@TableField 字段映射

Lombok 常用注解

注解 作用
@Data 生成getter/setter/toString/equals
@Getter 只生成getter
@Setter 只生成setter
@NoArgsConstructor 无参构造
@AllArgsConstructor 全参构造
@Builder 建造者模式

完整示例

UserController.java

java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/{id}")
    public Result<User> getUser(@PathVariable Long id) {
        User user = userService.getById(id);
        return Result.success(user);
    }
    
    @PostMapping
    public Result<Void> addUser(@RequestBody @Valid User user) {
        userService.addUser(user);
        return Result.success();
    }
}

UserService.java

java 复制代码
@Service
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getById(Long id) {
        return userMapper.selectById(id);
    }
    
    public void addUser(User user) {
        userMapper.insert(user);
    }
}

UserMapper.java

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // MyBatis-Plus 自动提供 CRUD 方法
}

User.java

java 复制代码
@Data
@TableName("sys_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private String email;
}

统一响应封装

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;    // 状态码
    private String message; // 提示信息
    private T data;         // 数据
    
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "success", data);
    }
    
    public static <T> Result<T> success() {
        return new Result<>(200, "success", null);
    }
    
    public static <T> Result<T> error(String message) {
        return new Result<>(500, message, null);
    }
}

整理时间: 2026-03-18

相关推荐
happymaker062618 小时前
SpringBoot学习日记——DAY02(SpringBoot整合Swagger3)
java·spring boot·学习
未若君雅裁18 小时前
Spring Boot 自动配置原理与常用注解
java·spring boot·后端
Yeh2020581 天前
springboot+vue笔记
vue.js·spring boot·笔记
YOU OU1 天前
SpringBoot 配置文件
java·spring boot·后端
逍遥德1 天前
SpringBoot自带TaskScheduler 接口使用详解:(02)微服务多实例模式下,爆发任务重复执行问题
spring boot·分布式·后端·微服务·中间件
Devin~Y1 天前
互联网大厂 Java 面试实录:JVM、Spring Boot、MyBatis、Redis、Kafka、Spring AI、K8s 全链路追问小Y
java·jvm·spring boot·redis·kafka·mybatis·spring security
Gauss松鼠会1 天前
【GaussDB】基于SpringBoot实现操作GaussDB(DWS)的项目实战
java·数据库·经验分享·spring boot·后端·sql·gaussdb
敖正炀1 天前
Spring 设计哲学再探:约定优于配置、误用与反模式
spring boot·spring
倒流时光三十年1 天前
第12篇 Rebalance 深度解析
spring boot·kafka