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

相关推荐
llz_1124 小时前
web-第四次课后作业
前端·spring boot·web
一杯奶茶¥5 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码5 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
雨辰AI10 小时前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务
砍材农夫12 小时前
物联网实战|Spring Boot + Netty 搭建 MQTT 消息路由与流转层
java·spring boot·后端·物联网·spring
lazy H13 小时前
Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
ide·spring boot·redis·后端·学习·intellij-idea
SXJR13 小时前
spring boot + langchain4j +milvus实现向量存储
java·spring boot·后端·大模型·milvus·rag·langchain4j
王木风13 小时前
Spring Boot + LLM 工程化:把短视频流水线拆成 16 个独立角色的踩坑记录
人工智能·spring boot·后端·开源·新媒体运营·音视频·agent
心之伊始14 小时前
Spring AI Chat Memory 实战:用 JDBC 给 Java Agent 加会话记忆
java·spring boot·agent·spring ai·chat memory
柏舟飞流15 小时前
Spring Boot 进阶实战:整合 MyBatis、Redis、JWT,搭一个更像真实项目的后端服务
spring boot·redis·mybatis