`
k1280000
  • 浏览: 203735 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对象mapping dozer,各种实现对比

 
阅读更多

Dozer

Dozer is a Java Bean to Java Bean mapper that recursively copies data from one object to another. Typically, these Java Beans will be of different complex types.

Dozer supports simple property mapping, complex type mapping, bi-directional mapping, implicit-explicit mapping, as well as recursive mapping. This includes mapping collection attributes that also need mapping at the element level.

Please read the about page for detailed information on Dozer.

---------------------------------------------------

Dozer支持 Java Bean 之间数据的递归拷贝。特别是一些复杂的java bean .

Dozer 支持简单的、复杂的、双向的、显隐式的映射以及递归映射。当然也支持集合属性及子元素的映射。

 

一般的BeanUtils需要copy的源和目标对象的字段名字要一致,而Dozer可以支持名字不一样的mapping,而且可以多个字段映射一个段,一个字段映射多个字段。

 

 

帮助文档

http://dozer.sourceforge.net/dozer-user-guide.pdf

 

 

突然想测试一下:

Spring BeanUtils / Apache common BeanUtils /Dozer 性能测试

测试代码

 

 

package com.practise.dozer;

import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;

import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;

import com.practise.dozer.beans.DestinationObject;
import com.practise.dozer.beans.SourceObject;

public class TestPrimitive {

	public static void main(String[] args) throws IllegalAccessException,
			InvocationTargetException {

		final Mapper mapper = new DozerBeanMapper();
		final int times = 1000000;

		new Thread(new Runnable() {

			@Override
			public void run() {
				long start = System.currentTimeMillis();
				DestinationObject destObject = null;
				for (int j = 0; j < times; j++) {
					destObject = mapper.map(getSourceObe(),
							DestinationObject.class);
				}
				System.out.println("Mapper cost "
						+ (System.currentTimeMillis() - start));
				System.out.println(destObject);
			}

		}).start();

		new Thread(new Runnable() {
			@Override
			public void run() {
				DestinationObject destObject2 = new DestinationObject();
				long start2 = System.currentTimeMillis();
				for (int j = 0; j < times; j++) {
					try {
						org.apache.commons.beanutils.BeanUtils.copyProperties(
								destObject2, getSourceObe());
					} catch (IllegalAccessException e) {
						e.printStackTrace();
					} catch (InvocationTargetException e) {
						e.printStackTrace();
					}
				}
				System.out.println("Apache Common BeanUtils cost "
						+ (System.currentTimeMillis() - start2));
				System.out.println(destObject2);
			}

		}).start();

		new Thread(new Runnable() {
			@Override
			public void run() {
				DestinationObject destObject2 = new DestinationObject();
				long start2 = System.currentTimeMillis();
				for (int j = 0; j < times; j++) {
					org.springframework.beans.BeanUtils.copyProperties(
							getSourceObe(), destObject2);
				}
				System.out.println("Spring BeanUtils cost "
						+ (System.currentTimeMillis() - start2));
				System.out.println(destObject2);
			}

		}).start();

	}

	private static SourceObject getSourceObe() {
		int i = 10;
		String str = "this is a 中";
		final SourceObject sourceObject = new SourceObject(i, str);

		DestinationObject innerDestObject = new DestinationObject();
		innerDestObject.setI(100);
		innerDestObject.setStr("innerDestObject");

		sourceObject.setDest(innerDestObject);
		sourceObject.setArray(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
		sourceObject.setListStr(Arrays.asList("1", "2", "1", "2", "1", "2",
				"1", "2"));
		return sourceObject;
	}

}

 

 

 

 

结果:

 

 Spring BeanUtils cost 1941

DestinationObject(i=10, str=this is a 中, dest=DestinationObject(i=100, str=innerDestObject, dest=null, array=null, listStr=null), array=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], listStr=[1, 2, 1, 2, 1, 2, 1, 2])

Apache Common BeanUtils cost 17832

DestinationObject(i=10, str=this is a 中, dest=DestinationObject(i=100, str=innerDestObject, dest=null, array=null, listStr=null), array=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], listStr=[1, 2, 1, 2, 1, 2, 1, 2])

Mapper cost 58599

DestinationObject(i=10, str=this is a 中, dest=DestinationObject(i=100, str=innerDestObject, dest=null, array=null, listStr=null), array=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], listStr=[1, 2, 1, 2, 1, 2, 1, 2])

 

 

Spring BeanUtils 最快而且快的不只一点点。
 
这里还有一个哥们也做了同样的测试:
测试代码
 
各种测试结果
 
 
 
 
 
 
 
 
 
 
分享到:
评论

相关推荐

    dozer的使用实例

    通过与Spring的集成、注解驱动的映射、自定义转换器、递归映射、双向映射以及性能优化,Dozer为开发者提供了丰富的功能,以满足各种数据转换需求。在实际开发中,了解并熟练运用这些特性,可以极大地提高代码的可...

    Dozer详解

    Dozer是一款强大的Java到Java对象映射库,它可以帮助开发者在不同的对象模型之间进行数据转换。在处理复杂的数据结构时,Dozer提供了便捷的方式,减少了手动转换代码的工作量,使得代码更加简洁、可维护。Dozer不仅...

    dozer的eclipse插件

    **Dozer Eclipse插件**是面向Java开发人员的一款强大工具,尤其在进行对象-对象映射(Object-Object Mapping)时能提供巨大的便利。Dozer是一个开源库,它简化了Java对象之间的数据转换过程,而Dozer Eclipse插件则...

    hibernate如何用O/R Mapping框架来实现我们的数据层

    O/R Mapping框架通过提供一种抽象层,使得开发者能够更加专注于业务逻辑的编写,而不是底层数据库的具体实现细节。 #### 二、Hibernate框架简介 Hibernate是一个开放源代码的对象关系映射框架,它提供了强大的对象...

    Dozer 使用

    Dozer 是一个开源的 Java 对象到对象映射库,它能够帮助开发者在 Java 应用程序中将一个对象模型映射到另一个对象模型。这个工具在处理复杂的数据转换时非常有用,尤其是在数据绑定、数据复制或者在服务层与表现层...

    VLAN Mapping实现同一网段不同VLAN的主机通信

    在连接两个VLAN的运营商交换机上部署VLAN Mapping功能,实现不同VLAN ID的映射。由于两个VLAN ID不一致,但是两个VLAN又属于同一个网段。用2台交换机模拟运行商,2台交换机模拟总公司和分公司交换网络,通过配置VLAN...

    open gl 在MFC下实现tone mapping算法

    OpenGL在MFC(Microsoft Foundation Classes)环境下实现Tone Mapping算法是一项常见的计算机图形学实践,它涉及到图像处理和视觉效果优化。Tone Mapping是一种用于高动态范围(HDR)图像到低动态范围(LDR)图像...

    SAP PI Java Mapping com.sap.aii.mapping.api PI MAPPING开发必须jar包

    Java Mapping基于Java类,可以利用Java的全套编程功能,包括类、对象、方法、异常处理等。 2. **核心jar包的作用**: - `com.sap.aii.mapping.api.jar`:这个jar包包含SAP PI Java Mapping的API接口,它提供了一...

    matlab_mapping_toolbox

    在MATLAB Mapping Toolbox中,用户可以轻松进行各种地图投影操作,如墨卡托投影、UTM投影、兰勃特等角投影等。此外,工具箱支持全球和局部坐标系之间的转换,例如从经纬度坐标到UTM坐标,或从笛卡尔坐标到地理坐标...

    TCPMapping.rar

    将各种内网的Windows远程桌面、远程控制部署到公网访问。 将各种基于TCP/IP协议的行业软件端口部署到公网访问,如《旺铺理财宝》的后台、网页版等。 将内网的各种数据库服务器,如MSSQL、MySQL、Postgres、Oracle等...

    SANGFOR_NGAF_6.8_DNS-Mapping配置指导.pdf

    6.应用场景:DNS-Mapping 功能广泛应用于各种网络环境中,如数据中心、云计算、物联网等。 7. 必要条件说明:在配置 DNS-Mapping 之前,用户需要了解 NGAF 6.8 的基本配置和 DNS 服务器的工作原理。 8. 配置思路:...

    solidity入门学习——mapping

    一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =&gt;uint) idmapping和mapping(uint =&gt;string) namemapping。idmapping用来表示地址变量和整型变量的对应关系,在注册过程中...

    图形学实验 tonemapping

    在摄影和计算机图形学中,tonemapping是对高动态范围图像进行处理的过程,通过降低整体对比度并调整不同亮度级别的强度,以便在标准显示器上呈现更加自然且细节丰富的图像。由于人眼具有宽广的动态范围,可以看到极...

    data mapping

    总结起来,"data mapping service object to xml"涉及到的关键知识点有服务对象的设计与使用、XML的结构和语法规则、数据映射的实现策略以及相关的错误处理和验证机制。这些知识对于构建能够跨系统交换数据的应用...

    OR Mapping中对象关系映射解决方案汇总

    ### OR Mapping中对象关系映射解决方案汇总 #### 继承关系映射方案 在面向对象编程中,继承是一种常见的机制,允许子类继承父类的属性和方法。在ORM(对象关系映射)环境中,正确处理继承关系对于构建高效、灵活的...

    端口转换软件tcpmapping

    例如,当我们的家庭网络只有一个公网IP时,家里的多台电脑、手机等设备想要同时访问互联网,就需要通过端口转换来实现。 TcpMapping软件就是这样的一个端口转换工具,它可以帮助用户在局域网内设置端口映射规则,将...

    Cube shadow mapping

    立方体阴影映射(Cube Shadow Mapping)是一种在3D图形渲染中实现阴影效果的技术,尤其适用于环境光照(cube environment mapping)的场景。该技术通过利用立方体贴图来存储光源的视图,从而计算物体是否被光源遮挡...

    HDR, tone mapping代码

    2. ToneMapping:这是一个目录,很可能包含了实现特定tone mapping算法的源代码或者应用程序。可能包括不同的算法,如Reinhard tone mapping、Durand tone mapping、Fattal tone mapping等,这些算法都有各自的优...

    informatica mapping文件 JAVA SDK开发工具包

    在Mapping中,源系统数据通过各种转换步骤(如过滤、联接、聚合等)被处理,最终转化为符合目标系统需求的数据格式。这些转换逻辑由开发人员在PowerCenter Designer中创建,保存为Mapping文件。 JAVA SDK(Software...

Global site tag (gtag.js) - Google Analytics