简化DTO开发

本文介绍了在日常开发中简化DTO(Data Transfer Object)创建的历程,从尝试将对象转换为Map进行JSON传输,到通过注解实现属性拷贝,再到最终采用代码生成工具优化性能。作者分享了三种不同版本的解决方案,探讨了每种方法的优缺点,并提供了完整的代码示例。这个过程旨在减少手动编写DTO的工作量,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日常开发中,我们常常要写DTO,但是这玩意写起来非常麻烦,而且封装起来也费劲。
我就想稍微解决一下这个问题。

最开始我想的是转换为map进行JSON传输

在这里插入图片描述
相关注解
BeanField主要用于起别名或忽略属性
Warp用于声明该属性非基本属性,也可以起别名

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Char {

    private Integer id;
    private String name;
    @Warp
    private Adress adress;

}

测试类(Adress太简单不展示了)
在这里插入图片描述
效果

不过后来我发现这样做不好,因为数据不一定都以JSON展示,远程调用还需要封装为对象所以DTO还是不能省略的,然后我尝试了拷贝属性的方法

DTO都是

@Data
@Warp("adress")
@DTO(value = Char.class,extend = "adress")
public class User {

    private Integer id;
    @Value("name")
    private String nickname;
    @Source("adress")
    private String city;
    @Source("adress")
    private String province;

}

第一版

注解
Value用于纠正属性名信息
Source用于指定该属性在对像类的什么属性中
在这里插入图片描述
效果

第二版

主要纠正第一版在DTO有多个属性处于源对象属性深层时,需要写太多注解的问题
注解
Value作用同上
Warp标注在类上,指定源对象哪些属性可以展开,会自动按属性名匹配,可以使用Value起别名
在这里插入图片描述
效果同上

第三版

使用代码生成,主要因为前面两种需要使用大量反射,频繁使用销毁性能
注解
Value:作用同上
DTO:标明源对象哪些属性可以展开,以及源对象类型信息
在这里插入图片描述
传入DTO类进行代码生成,默认生成位置与DTO类处于同一包下,也有指定生成位置的重载
在这里插入图片描述
生成结果,使用比较简单不再演示

全部代码:https://gitee.com/shaokang123/simple-dto/tree/master/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值