DO(Data Object): —包命名为do
简单一点理解就是里面的字段一一与数据库表字段对应,需与数据库打交道的就使用DO对象
栗子:
需要进行商品的更新操作,这里可以看到对数据库进行打交道的时候,是将传递过来的DTO对象转化为了DO对象,然后才进行更新操作的
public Integer updateProduct(ProductDTO productDTO) {
ProductDO productDO = new ProductDO();
BeanUtils.copyProperties(productDTO, productDO);
return productMapper.updateById(productDO);
}
DTO(Data Transfer Object): —包命名为dto
简单一点理解就是在数据传输的时候用到的
栗子:
更id对商品进行查询,这里可以看到数据库中查询出来返回的结果是DO对象,要将数据进行传递就转化为DTO对象
public ProductDTO selectById(Long id) {
ProductDO productDO = productMapper.selectProductById(id);
if (ObjectUtils.isEmpty(productDO)) {
return null;
}
ProductDTO productDTO = new ProductDTO();
BeanUtils.copyProperties(productDO, productDTO);
return productDTO;
}
VO(View Object) —包命名为vo
简单一点理解就是用于给页面显示使用的
栗子:
根据id进行商品查询,这里可以看到通过将DTO对象转化为VO对象,返给前端的是VO对象
@GetMapping("/pid/{pid}")
@ApiOperation("根据商品id查询商品")
@Log("查询商品")
ApiResult<ProductVO> selectById(@PathVariable("pid") Long pid) {
ProductDTO productDTO = productService.selectById(pid);
ProductVO productVO=new ProductVO()
BeanUtils.copyProperties(productDTO, productVO);
return ApiResult.ok(productVO);
}
QueryParam —包命名为param
简单一点理解就是对请求参数使用的,时候也可以使用DTO作为请求参数(可能每个公司要求的不一样)
栗子:
根据商品一些不同的属性进行分页展示,这里可以看到接收请求的参数使用的是QueryParam作为请求参数(可以看到这里网前端反的对象是有问题的,应该反会的是VO对象,这里我就不行调整了,要注意深拷贝浅拷贝问题,可能有些公司不是那么规范,甚至不使用VO,直接给前端反DTO)
@PostMapping("/products")
@ApiOperation("商品分页列表")
ApiResult<Paging<ProductDTO>> pageData(@Valid @RequestBody ProductQueryParam query) {
Paging<ProductDTO> productPageInfo = productService.selectPage(query);
return ApiResult.ok(productPageInfo);
}
提升
这里只是简单介绍了怎么用,至于为什么这么命名
可以参考一下这篇blog:https://www.cnblogs.com/suizhikuo/p/8409153.html