实体属性复制copy,实现实体转换(不同实体类,相同字段属性互相转换)
首先,我们要清楚我们为什么要复制实体,这样做的目的,同时我们自己是不是也可以get和set呢?
第一,任何的技术或者插件都是提升我们的开发效率和降低容错的;同时也肯定是业务或者是我们技术想达到代码实现数据备份等目的,而产生的,同样,我们为什么要复制或者转换一个实体呢?
无外乎下面几种情况:
1、我们需要对前端或者相关接口进行返回数据的替换;可能新建相关实体,对需要返回相同实体属性进行赋值;
2、根据业务实际情况,我们需要对引用和相关的功能字段进行赋值;字段属性比较多。get和set需要很多代码;
3、我们需要对删除时的相关表数据进行备份或者保存到记录表中。
第二,实现相关属性赋值,达到转换实体的方法都有哪些呢?
1、我们自己手动get和set(太麻烦,一行代码能解决的事,而且自己写容易漏掉或者出现错误);
2、使用相关架包的api
第三、实现相关实体赋值转换的方法大概有哪些呢?
1、Apache的BeanUtils:BeanUtils是Apache commens组件里面的成员,由Apache提供的一套开源api,用于简化对javaBean的操作,能够对基本类型自动转换。
2、Spring的BeanUtils:BeanUtils是Spring框架提供的对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。
3、Mapstruct:MapStruct基于注解处理器,在编译时生成映射代码,避免了运行时的性能开销。
以下是MapStruct对象拷贝技术的一些特点和优势:
类型安全:MapStruct在编译时会进行类型检查,确保源对象和目标对象的属性类型是兼容的,避免了在运行时可能出现的类型转换错误。
自定义映射规则:开发人员可以通过自定义的映射方法来定义复杂的属性映射规则,例如格式转换、条件映射等。
支持构造函数映射:MapStruct可以根据构造函数来进行对象映射,避免了手动设置属性值的繁琐操作。
支持集合映射:MapStruct可以处理集合类型之间的映射,包括List、Set、Map等。
可扩展性:MapStruct提供了丰富的注解和SPI(Service Provider Interface)机制,可以通过扩展接口和插件来实现更复杂的映射需求。
使用MapStruct进行对象拷贝通常需要以下步骤:
定义映射接口:创建一个带有@Mapper注解的接口,定义需要映射的方法。
编写映射方法:在映射接口中定义方法,使用@Mapping注解来指定属性之间的映射关系。
生成映射代码:在编译时,MapStruct会根据映射接口生成对应的映射实现类。
调用映射方法:在代码中调用生成的映射方法,实现对象之间的属性拷贝。
总的来说,MapStruct是一个强大且易于使用的对象拷贝工具,能够帮助开发人员简化对象映射的操作,提高代码质量和开发效率。
4、BeanCopier:BeanCopier是Cglib包中的一个类,用于对象的复制。目标对象必须先实例化而且对象必须要有setter方法。但是拷贝的速度还是很快的。在要拷贝的数据量比较大的时候使用比较合适。
第四、不同方法效率和吞吐量
这个转换或者复制一般也很少用,因为一般都是业务相关字段比较少也就两三个;前些年用到的也大多都是BeanUtils;最近项目需要在删除的时候实现之前数据的记录备份;突然查了资料;
有这么多的方法可以用;大家可以根据自己的实际情况进行选择;体量过大数据没有多大的时候,也没有一味的追求效率;1ms和10ms其实在数据量不大的情况下意义不大;大家了解会用即可。
有兴趣的朋友可以关注一下公众号,一起认识有机会交流交流!
详细可以参考:https://blog.csdn.net/m0_59176231/article/details/138329576
春有百花秋有月,夏有凉风冬有雪!