Spring Boot 开发接口指南
开发思路
写接口的本质是:Controller 接收请求 → Service 处理业务 → Mapper 操作数据库,三层各司其职。
1. Controller 层(接收请求)
@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 层(业务逻辑)
@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 写法
@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 写法(更简洁)
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,CRUD 自动生成
// selectById, insert, updateById, deleteById 等方法自带
}
4. Entity 层(数据模型)
@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
@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
@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
@Mapper
public interface UserMapper extends BaseMapper<User> {
// MyBatis-Plus 自动提供 CRUD 方法
}
User.java
@Data
@TableName("sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private String email;
}
统一响应封装
@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