DTO简单讲解
DTO 是什么
- DTO(Data Transfer Object,数据传输对象):用于在各层/各系统之间“搬运数据”的简单对象,只承载字段,不包含业务逻辑。
解决什么问题
- 层与层之间(Controller→Service、服务A→服务B)解耦字段结构
- 只传必要数据,避免把数据库实体直接暴露到外部
- 适配不同场景的入参/出参,便于校验、脱敏、转换
和常见对象的区别
- Entity/PO:数据库实体,对应表结构
- DTO:传输用的结构(接口入参/跨服务),无业务逻辑
- VO:展示给前端/页面的视图对象(出参)
- BO:领域内的业务对象(含业务含义/规则)
典型用法
接口入参:
public class UserCreateDTO {private String username;private String password;private String email;
}
控制器接收:
@PostMapping("/users")
public Result<Void> create(@RequestBody UserCreateDTO dto) { ... }
最佳实践
- 按场景定义多个 DTO(CreateDTO、UpdateDTO、QueryDTO)
- 不放业务方法;只做数据承载与校验注解(如 @NotNull)
- 与 Entity 分离,转换用 MapStruct/手写转换器
- 对外出参用 VO,注意脱敏与隐藏内部字段