我已经下载并测试了这两个映射库.我编写了一个程序,它有100000个迭代并映射同一个类的bean:
public class IntBean {
@JMap
private int int1;
@JMap
private int int2;
.
.
.
@JMap
private int int10;
}
Run Code Online (Sandbox Code Playgroud)
在迭代开始之前创建映射器:
private JMapper jmapper = new JMapper(IntBean.class, IntBean.class);
private MapperFactory orikaFactory = new DefaultMapperFactory.Builder().build();
private MapperFacade orikaFacade = null;
orikaFactory.registerClassMap(orikaFactory.classMap(IntBean.class,IntBean.class).byDefault().toClassMap());
orikaFacade = orikaFactory.getMapperFacade();
Run Code Online (Sandbox Code Playgroud)
每次迭代都是什么:
this.orikaFacade.map(a1, a2);
Run Code Online (Sandbox Code Playgroud)
要么
a2 = (A) this.jmapper2.getDestination(a1);
Run Code Online (Sandbox Code Playgroud)
手绘图:1ms
Orika映射:32ms
手绘图:6ms高速!!!
推土机:1140毫米
我知道,Orika和Jmapper是来自谷歌的优秀图书馆,他们使用的反射方式与Dozer不同,后者速度要慢得多,他们反思以某种方式生成代码.
我有3个问题:
1)它们是如何工作的 - 当代码生成时,在maven构建期间,在运行时 - 每次我在代码中创建映射器时?当我创建映射器时,它们是否会动态更改类代码字节.
2)为什么我注意到这个速度差异?如果以某种方式生成代码,那么为什么会有不同的结果
3)您会选择哪个库?为什么?两者都具有相同的功能?为什么两者都来自谷歌?为什么Google没有开发Orika而是创建了Jmapper?
我不熟悉 Jmapper,所以我将专注于 Orika 和 Dozer
它们是如何工作的?它们的工作原理不同。Dozer 使用反射,Orika 使用字节码生成。在 maven 构建期间?什么都没有发生,一切都在运行时完成。Dozer 通过其 get 方法访问字段并通过 setter 方法设置目标对象中的值。Orkia 生成字节码来完成这项工作,就像您自己完成了手绘地图一样。第一次转换很慢,之后的每个转换都应该更快。
推土机,应该始终保持大致相同的速度,依靠反射。Orika,字节码生成,第一次运行在生成映射代码时应该慢很多。
简短的回答,这取决于。你想映射什么?如果类大致相似,Dozer 非常擅长从一种类型映射到另一种类型。它根本不处理地图。如果您的对象中有 Map,请准备好编写自定义转换器代码
Orika 擅长在相同类型的两个对象之间映射数据。它的某些 List 处理有点奇怪,它将列表视为单个对象而不是单个对象的集合。同样,也准备为此编写一些代码。
两者都不能特别好地处理大型对象图,准备为此编写大量配置。
除非您要在应用程序中进行大量映射,或者需要频繁更改的映射。自己写
| 归档时间: |
|
| 查看次数: |
10328 次 |
| 最近记录: |