DTO(Data Transfer Object)数据传输对象
接口接参可以使用DTO,简单来说就是Controller中函数的参数,然后我们需要调用service层,这个时候就轮到我们的TO出场了。
TO(Transfer Object)传输对象
我们使用TO去作为service层函数的参数,返回值也可以继续使用TO,接下里封装返回需要的VO。
VO(View Object)展示层对象
用来返回给前端显示渲染的对象。
前三种O的例子:
@PostMapping("findUserList")
public AjaxJson findUserList(@RequestBody PageDTO pageDTO) {
// DTO转换为TO,用于向service层传输
UserTO param = new UserTO();
param.setPageNum(pageDTO.getPageNum());
param.setPageSize(pageDTO.getPageSize());
param.setUsername(pageDTO.getKeywords());
UserTO result = userService.findUserList(param);
// TO转换成VO,用于向页面展示
List<UserVO> userVOList = result.getDataList().stream().map(data -> UserVO.builder().id(data.getUser().getId()).username(data.getUser().getUsername()).phoneNumber(data.getUserInfo().getPhoneNumber()).build()).collect(Collectors.toList());
return AjaxJson.success().put("total", result.getTotal()).put("pageNum", result.getPageNum()).put("pageSize", result.getPageSize()).put("data", userVOList);
}
PO(Persistant Object)持久层对象/DO(Domain Object)领域对象
这两个一般和数据库表的字段一一对应。
BO(Business Object)业务对象
一般包含多个对象,和业务关系有关,例子:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserBO implements Serializable {
private static final long serialVersionUID = -8368935565931556343L;
private UserPO user;
private UserInfoPO userInfo;
}
AO(Application Object)
AO在我认为就是service层的这个类,例如UserService就是一个AO。
DAO(Data Access Object)
对应上面的Mapper,例如MpUserMapper就是一个DAO。
POJO(Plain Ordinary Java Object)
专指只有 setter/getter/toString 的简单类,包括 DO/DTO/BO/VO 等。