DTO、TO、VO、PO、DO、BO、AO、DAO、POJO

名词解释

Posted by Duu on June 16, 2024

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 等。