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])
相关推荐
dozer 的配置Mapping,包含普通映射配置,List复杂类型配置。ReqParam.json 是转换类的参数值,StringUtils 读取文件。
理解典型的三层架构,如何用O/R Mapping框架来实现我们的数据层。这里主要介绍现在非常流程的Hibernate框架,,掌握Hibernate相关的概念;并如何做对象和关系的映射,如何在应用中使用Hibernate
O/R Mapping中对象关系映射解决方案汇总 对于一个ORM方案时,为了提供用户对具体映射方案的细颗粒度的控制的可能,特别对于企业级应用,应该是用户选择是否使用该产品比较重要的因素之一,需要尽可能多的实现...
在连接两个VLAN的运营商交换机上部署VLAN Mapping功能,实现不同VLAN ID的映射。由于两个VLAN ID不一致,但是两个VLAN又属于同一个网段。用2台交换机模拟运行商,2台交换机模拟总公司和分公司交换网络,通过配置VLAN...
内含dozer的完整实例,以及jar包。dozer比BeanUtils更灵活,同时可以很容易地跟spring集成。也可以用注解@Mapping("asstManagerId")来代替xml配置
将各种内网的Windows远程桌面、远程控制部署到公网访问。 将各种基于TCP/IP协议的行业软件端口部署到公网访问,如《旺铺理财宝》的后台、网页版等。 将内网的各种数据库服务器,如MSSQL、MySQL、Postgres、Oracle等...
一个实现 cube shadow mapping 功能的源代码. 通过这个例程, 能加深大家对 cube environment mapping 和 shadow mapping 的理解和运用.
matlab_mapping_toolbox extracted from version 2019b
Macrobject NObject 是一套用于 .NET 平台的 O/R Mapping (Object-Relation Mapping,对象关系映射) 框架。 ??NObject O/R Mapping 框架支持多种数据库,完全对用户透明,切换数据库无需更改代码。NObject O/R ...
一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =>uint) idmapping和mapping(uint =>string) namemapping。idmapping用来表示地址变量和整型变量的对应关系,在注册过程中...
it gives ofdm mapping
3D 法线贴图(normal mapping)的实现
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思想与ADO.NET 基于.NET的Web应用框架的设计与实现 将对象映射到关系数据库——对象/关系映射(O/R_Mapping)详解 面向对象设计中的O/R映射架构
利用OpenGl实现的Shadow Mapping程序
计算机图形学课上的实验程序,可以读取BMP图片并进行tone mapping处理
arcgis103.1版本插入动态表格,制图时插入动态表格,Esri Mapping and Charting Solutions。
Generic Mapping Tools (GMT) 中文手册
关于如何使用Ethercat, 以及Ethercat的配置PDO Mapping配置步骤。
ArcGIS Production Mapping 10.1扩展,动态图表,百度网盘链接永久有限。