对象映射是在业务开发DTO,VO,PO之间相互转化经常遇到的问题。刚入门的程序员把一个对象映射成其他对象往往会使用手动set,比如下面代码A映射到B,手动set会非常枯燥且麻烦,特别是当属性值非常多的时候。
class A {
String f1,
Long f2,
.....
}
class B {
String f1,
Long f2,
.....
}
public void mapAtoB(A a, B b) {
B.f1 = A.f1;
B.f2 = A.f2;
.....
}
最近接手了一个其他组的项目,发现在项目中对象映射上竟然采用了三种不同方法:BeanUtil, Orika和MapStruct。BeanUtil是Spring框架自带的映射工具, Orika和Mapstruct是开源的对象映射的两种方法。下面的代码分别使用不同的方式进行对象映射
//BeanUtil
BeanUtils.copyProperties(a, b)
//Orika
private static final MapperFacade FACADE = new DefaultMapperFactory.Builder().build().getMapperFacade();
b = FACADE.map(a, B.class);
//MapStruct
public interface Converter {
Converter INSTANCE = Mappers.getMapper(Converter.class);
B b = convertToEntity(A a);
如果只是对比代码量,BeanUils的方式是最简单的,代码量最少,但是在实际的工作场景中会发现使用BeanUils是最坑的,比如传了Null的对象进去,就会报NPE的错误,需要在映射前进行判空的处理。下面是对三种方式的比较。
BeanUtils
优点
缺点
Orika
优点
缺点
MapStruct
优点
缺点
当选择这些工具中的一个时,应该考虑应用程序的特定需求。如果应用程序需要高性能和复杂的映射场景,则可以选择Orika或MapStruct。如果应用程序需要简单的属性复制,则可以选择BeanUtils。在Orika和MapStruct之间进行选择时,应该考虑是否更关注应用程序的启动时间还是编译时间。
从代码可读性和重构的角度来看,个人认为MapStruct是最佳选择。
MapStruct的代码生成是在编译时完成的,这意味着它生成的代码可以与手动编写的代码一样清晰和易于理解。此外,MapStruct生成的代码易于重构和维护,因为它们与手动编写的代码没有区别。
相比之下,Orika和BeanUtils生成的代码通常比手写的代码难以阅读和理解,这可能会导致在重构和维护代码时出现问题。Orika的字节码生成也可能会使代码变得更加复杂和难以调试。
因此,从代码可读性和重构的角度来看,MapStruct是最佳选择。它生成的代码清晰易懂,易于维护和重构。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有