面试中被问到“Java为什么有这么多‘O’,比如PO、DTO、VO、BO”,我之前的回答不够系统,复盘时发现自己对这些“O”的理解和串联不够清晰。本文以一个基于Spring Boot + MyBatis的用户查询接口为例,解析各“O”的定位、必要性及对象转换优化方案。
一、场景:用户查询接口
需求:前端通过GET /user?userId=123
查询用户信息,后端返回姓名和注册天数。
技术栈:Spring Boot + MyBatis。
二、请求链路分析
1. Controller层:入参是DTO
public class UserQueryDTO {
private Long userId;
private Integer page;
private Integer size;
// getters and setters
}
@RestController
public class UserController {
private final UserService userService;
@GetMapping("/user")
public UserVO getUser(@RequestParam UserQueryDTO queryDTO) {
return userService.getUserInfo(queryDTO);
}
}
DTO(Data Transfer Object)角色:
- 定位:数据传输对象,封装前端输入参数。
- 作用:
- 结构化参数,便于使用
@Valid
注解校验。 - 避免多个参数散落在方法签名中,提升可读性。
- 结构化参数,便于使用
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论