写接口的本质是: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);
}
@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);
}
}