实体与DTO之间的转换

实体与DTO之间的转换

1.导言

在代码的开发中我们经常碰见实体的返回值远比需要展示的数据多,我们能通过实体之间快速的进行赋值的操作

2.转换的方式

2.1 将实体之间的转换提出为公共方法

@Data
public class Entity{
    private String title;
    private String link;
    private String fileRoute;
    private String sourceChannel;
    private String publishDate;
    private String titleId;
    private String wellId;

    public static EntityDTO toDTO(Entity entity) {
        EntityDTO entityDTO= new EntityDTO ();
        entityDTO.setTitle(titleLinkReqDTO.getTitle());
        entityDTO.setLink(titleLinkReqDTO.getLink());
        entityDTO.setFileRoute(titleLinkReqDTO.getFileRoute());
        entityDTO.setSourceChannel(titleLinkReqDTO.getSource());
        entityDTO.setPublishDate(titleLinkReqDTO.getReleaseTime());
        return entityDTO;
    }

上述方式是提前将实体之间的转换写出后续那里需要直接调用方法就可以,无需进行重复的赋值工作,但是在你需要将一个实体转换为多个不同的DTO时也需要进行多次的进行这个操作

2.2使用注解

//第二个参数的意思为 自动忽略未映射数据
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface LaunchConverter {
	//例1 自动将你的数据进行转换
    UserDto toUserDto(User user);

	//如果你的实体与DTO之间的字段名并不完全对应
	//可以通过@Mapping这个方法来指定你的数据来源字段与数据目标字段
	 @Mapping(source = "phone",target = "phoneDto")
    UserDto toUserDto(User user);
	
	//他也可以进行多个字段的源数据与目标数据的对应
    @Mappings({
            @Mapping(source = "id",target = "idDto"),
            @Mapping(source = "name",target = "nameDto"),
            @Mapping(source = "phone",target = "phoneDto")
    })
    UserDto toUserDto(User user);
	
	//此外@Mapping方法也可以指定单个或多个目标数据无需转换
    @Mapping(source = "name",ignore = true)
    UserDto toUserDto(User user);

	//还可以在转换时对数据进行处理
    @Mapping(source = "time", target = "time",dateFormat = "yyyy-MM-dd HH:mm:ss")
    UserDto toUserDto(User user);

	//constant中的值为无论对应的字段是否有值都使用默认值
    @Mapping(target = "userName", constant = "yby")
    //source中的值如果为空则会使用defaultValue中的值 而不会全部使用
    @Mapping(target = "modelColor", source = "modelColor", defaultValue = "标致")
 	UserDto toUserDto(User user);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值