别再用BeanUtils转换对象啦!这个框架更快更强大!!
大家好,我是可爱又机灵的开源小妹。
如今微服务架构和领域驱动设计 DDD 愈来愈盛行,于是我们有了大量的 DO 对象与 DTO 对象的映射转化场景。
以前的我都是傻乎乎的使用 getter / setter 方式转换,又慢又容易出错。
周末小妹在家好好的研究了一下,给大家带来开源项目 Orika
!
它是一个使用字节码技术栈实现的高性能 Java 对象映射框架,在众多映射框架中是简单易用又高效的代表之作!
下面由小妹带大家去感受一下它的魅力吧!
优势
性能
对比其他很多工具使用反射方式实现的映射,Orika
它是直接动态加载 Javasist 类库生成对象映射的字节码进行字段映射,这种方式比传统的反射赋值,速度上会快很多。
易用
无需手动敲重复的 getter / setter 方法,不用再写繁琐的 Convert 转化类,无需配置就可直接使用!
灵活
支持两个对象的字段名不同的映射关系,也支持同一个字段名不同数据类型的转换,甚至于支持嵌套对象的字段映射,完全能够满足你不同的转换需求!
快速入门
1. 引包
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.5.4</version> <!-- or latest version -->
</dependency>
2. 获取映射工厂 MapperFactor
MapperFactor mapperFactory = new DefaultMapperFactor.Builder().build();
你可以使用 MapperFactor 注册指定的类之间的字段对应关系:
// 若两个对象字段一一对应,此步可以省略
mapperFactory.classMap(PersonSource.class, PersonDestination.class)
.field("firstName", "givenName")
.field("lastName", "sirName")
.byDefault()
.register();
当然也可以根据你的需求,注册自定义的 Converter 等。
3. 获取 MapperFacade,进行对象映射
上一步已经获取了映射工厂 MapperFactor,而这一步通过工厂获取实例,并进行映射。
// 获取实例
MapperFacade mapper = mapperFactor.getMapperFacade();
// 原对象
PersonSource source = new PersonSource();
// set some field values
// 映射,获取映射后的对象
PersonDestination destination = mapper.map(source, PersonDestination.class);
是不是很简单!Orika
的一大特点就是使用起来非常简单,当然如果你有更特殊的使用场景,可以自行查阅它的官方文档进行定制化,相信你会渐渐放弃让人奔溃的 getter / setter 方式。
我也不用天天加班了!(ó﹏ò。)
对比
我还尝试了几款常见的对象映射框架,比如 Spring 的 BeanUtils, Dozer 和 MapStruct 等。
BeanUtils
使用比较简单,但是使用反射 Method 的 invoke(Object obj, Object... args)去赋值,效率低下,并且不能支持不同名称的字段属性映射等复杂的场景。
Dozer
有良好的定制化属性映射功能,支持简单属性、复杂类型的映射和递归映射等功能。但是同样使用了反射技术进行赋值,效率非常不能让人满意。
MapStruct
是一个能够在编译期自动生成 Mapper 类的工具,自动生成的代码采用的 getter / setter 方式进行赋值,所以它的执行效率很高。但是 MapStruct 框架有一个致命的弱点,是使用起来比较繁琐,每一对映射对象都需要新增一个 Mapper 接口,再由编译时自动生成具体的实现,使用起来不便利。
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
// 编译后会自动生成这个方法的具体实现
@Mapping(source = "numberOfSeats", target = "seatCount")
CarDto carToCarDto(Car car);
}
小妹总结
随着如 DTO 与 DO 类相互映射的场景越来越多,找到一个好用的 JavaBean 映射框架非常重要。
今天小妹介绍的 Orika
框架,就是其中非常优秀的作品。它在使用的便捷程度、灵活程度和性能方便做出了很好的平衡,非常推荐大家上手试一试这款优秀的开源作品!
相关文章
- java对象转换为json字符串_java中将字符串转换为json
- 谷歌用新AI超越自己:让Imagen能够指定生成对象,风格还能随意转换
- 图数据转换为DataFrame
- CSS3d转换
- js把HTML转成对象,将js对象转换为html「建议收藏」
- php数组转换对象方法[通俗易懂]
- java中json字符串和java对象的转换「建议收藏」
- objectmapper json转对象_篆体字转换器在线转换
- 构造函数隐式转换_构造函数实例化对象
- 软件分享 | 第二十三期 pdf格式转换(电脑端)
- Spring Boot | 集成MapStruct实现不同类型Java对象间的自动转换
- js中数组、对象与JSON之间的相互转换
- Oracle to_char 日期转换字符串语句分享
- #c word转换PDF详解编程语言
- 批量转换到csvLinux下Excel批量转换为CSV格式的方法(linux下excel)
- MySQL的默默转变:解开谜题(mysql隐式转换)
- 甲骨文云计算平台推出免费迁移转换工具 吸引企业从微软或亚马逊迁移过来
- 型转换Oracle类型转换:实现速度与数据完整性(oracle类)
- MySQL 时间格式转换指南(mysql时间格式转换)
- MSSQL转换数字的方式指南(mssql 转数字)
- 以Oracle为引擎,空值转变大有可为(oracle为空转换)
- 谷歌为YouTube打造Argos定制芯片 支持AV1视频编解码及转换
- 解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
- php时区转换转换函数
- 将json对象转换为字符串的方法
- npoi2.0将datatable对象转换为excel2007示例
- JS对象与json字符串格式转换实例