`@ResponseBody` 和 `@Mapper` 是 Spring 框架中两个不同用途的注解,它们分别用于处理 HTTP 响应和 MyBatis 映射器接口的定义。
### @ResponseBody
`@ResponseBody` 注解用于 Spring MVC 控制器方法中,指示该方法的返回值应该直接写入 HTTP 响应体中,而不是被解析为跳转路径或视图名称。这通常用于创建 RESTful API,其中控制器方法返回 JSON 或 XML 格式的数据。
当方法返回一个对象时,Spring 会自动使用合适的消息转换器(如 Jackson 或 JAXB)将返回对象转换为 JSON 或 XML 格式,并设置相应的 `Content-Type` 响应头。
**例子**:
```java
@RestController
public class MyRestController {
@GetMapping("/users/{id}")
public @ResponseBody User getUser(@PathVariable Long id) {
// ... 获取用户信息
return user;
}
}
```
在这个例子中,`getUser` 方法的返回值 `User` 对象将被转换为 JSON 格式,并作为响应体发送给客户端。
### @Mapper
`@Mapper` 注解是 MyBatis 框架中的一个注解,用于标记 MyBatis 的映射器接口(Mapper Interface)。这个注解告诉 MyBatis,接口中的方法应该与特定的 SQL 映射文件或使用注解定义的 SQL 语句相对应。
当使用 `@Mapper` 注解时,MyBatis 会创建接口的代理实现,并在运行时处理方法调用,将它们映射到相应的 SQL 语句。这使得开发者可以编写更加简洁的代码,而不需要手动创建和维护 SQL 映射文件。
**例子**:
```java
@Mapper
public interface UserMapper {
User selectUserById(int id);
}
```
在这个例子中,`UserMapper` 接口被标记为 MyBatis 的映射器接口。`selectUserById` 方法预期与一个 SQL 查询相对应,该查询用于根据用户 ID 获取用户信息。
### 总结
- `@ResponseBody` 用于 Spring MVC,指示方法的返回值应该作为 HTTP 响应体直接返回。
- `@Mapper` 用于 MyBatis,标记映射器接口,以便 MyBatis 可以创建代理实现并处理 SQL 映射。
这两个注解在 Spring Boot 应用中经常一起使用,`@Mapper` 用于定义数据访问层接口,而 `@ResponseBody` 用于在控制器中返回响应数据。