`
k1280000
  • 浏览: 196182 次
  • 性别: 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复杂类型测试类.zip

    dozer 的配置Mapping,包含普通映射配置,List复杂类型配置。ReqParam.json 是转换类的参数值,StringUtils 读取文件。

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

    理解典型的三层架构,如何用O/R Mapping框架来实现我们的数据层。这里主要介绍现在非常流程的Hibernate框架,,掌握Hibernate相关的概念;并如何做对象和关系的映射,如何在应用中使用Hibernate

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

    O/R Mapping中对象关系映射解决方案汇总 对于一个ORM方案时,为了提供用户对具体映射方案的细颗粒度的控制的可能,特别对于企业级应用,应该是用户选择是否使用该产品比较重要的因素之一,需要尽可能多的实现...

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

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

    dozer的使用实例

    内含dozer的完整实例,以及jar包。dozer比BeanUtils更灵活,同时可以很容易地跟spring集成。也可以用注解@Mapping("asstManagerId")来代替xml配置

    TCPMapping.rar

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

    Cube shadow mapping

    一个实现 cube shadow mapping 功能的源代码. 通过这个例程, 能加深大家对 cube environment mapping 和 shadow mapping 的理解和运用.

    matlab_mapping_toolbox

    matlab_mapping_toolbox extracted from version 2019b

    Macrobject NObject O/R Mapping 框架

    Macrobject NObject 是一套用于 .NET 平台的 O/R Mapping (Object-Relation Mapping,对象关系映射) 框架。 ??NObject O/R Mapping 框架支持多种数据库,完全对用户透明,切换数据库无需更改代码。NObject O/R ...

    solidity入门学习——mapping

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

    OFDMA_Data_mapping.zip_OFDM_mapping_it_ofdm mapping_ofdma

    it gives ofdm mapping

    3D_Shader_NormalMapping.rar

    3D 法线贴图(normal mapping)的实现

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

    XI PI MAPPING开发必须jar包 import com.sap.aii.mapping.api.*; import com.sap.aii.mapping.api.*; import com.sap.aii.mapping.lookup.*; import com.sap.aii.mappingtool.tf7.rt.*;

    O/R_Mapping思想

    O/R_Mapping思想与ADO.NET 基于.NET的Web应用框架的设计与实现 将对象映射到关系数据库——对象/关系映射(O/R_Mapping)详解 面向对象设计中的O/R映射架构

    Shadow Mapping

    利用OpenGl实现的Shadow Mapping程序

    open gl 在MFC下实现tone mapping算法

    计算机图形学课上的实验程序,可以读取BMP图片并进行tone mapping处理

    arcgis10.3.1的ESRI Producting Mapping扩展

    arcgis103.1版本插入动态表格,制图时插入动态表格,Esri Mapping and Charting Solutions。

    Generic Mapping Tools (GMT) 中文手册

    Generic Mapping Tools (GMT) 中文手册

    Ethercat PDO Mapping Doc

    关于如何使用Ethercat, 以及Ethercat的配置PDO Mapping配置步骤。

    ArcGIS Production Mapping10.1百度网盘下载.txt

    ArcGIS Production Mapping 10.1扩展,动态图表,百度网盘链接永久有限。

Global site tag (gtag.js) - Google Analytics