java bean之间的互转

javabean之间的互转

需求:比如DO到DTO的转换。

考量要素:

1.简单的约定优于配置的同名属性copy

2.嵌套属性copy

3.flattern(扁平化)支持,要支持N层结构的copy到一层结构。

4.性能

如下这个网页,里面提到了好多工具。

http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping

注意到许多工具采用静态化的生成java字节码的方式,这样和hardcode性能所差无几了。

id描述是否支持flattern最新版本URLTransmorph只是不同类型间的互转,和需求相去胜远N3.1.3https://github.com/cchabanois/transmorphCommons-LangArrayUtils也只是不同类型间的互转N3.1http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils.htmlCommons-Convert也只是不同类型间的互转,目前在apache的sandbox里N1.0-SNAPSHOThttp://commons.apache.org/sandbox/commons-convertSpringframeworkPropertyEditors也只是不同类型间的互转NEZMorph能同类型同名属性批量copyN1.0.6http://sourceforge.net/projects/ezmorph/Commons-BeanUtilsBeanUtils只能同类型同名属性批量copy,PropertyUtils可以用类似ognl表达式copy嵌套的属性,但这个东西的性能被吐槽不好Y1.8.3http://commons.apache.org/proper/commons-beanutils/Morph没找到文档1.1.1http://sourceforge.net/projects/morph/Lorentz似乎死了OTOM"Autumn"没找到文档https://java.net/projects/otomSmooks没找到文档,貌似可以多种格式比如csv,javabean,jms消息互转,不是我们的需求场景https://github.com/smooks/smookshttp://www.infoq.com/cn/articles/event-streaming-with-smooksJMapper支持annotaion描述映射N1.2http://code.google.com/p/jmapper-framework/cglibBeanCopier,BulkBean,BeanMap,FastClass/FastMethod采用生成字节码的方法,性能相当的高N2.3sourceforge.net/projects/cglibognlognl表达式肯定功能强大Y4.0-SNAPSHOThttp://commons.apache.org/proper/commons-ognl/mapping4java国人造的一个轮子,性能不错N1.0http://code.google.com/p/mapping4java/Dozer貌似功能比较强大,可通过xml来配置映射,但性能不行Y5.4https://github.com/DozerMapper/dozerOrika一个新秀,比Dozer性能好,可以一试,但没找到配xml的方法Y1.4.2http://orika-mapper.github.io/orika-docs/index.htmlModelMapper采用约定优于配置的方式自动映射Y0.5.6http://modelmapper.org

一些参考资料

cglib相关性能测试对比http://www.iteye.com/topic/801577cglib源码学习交流http://www.iteye.com/topic/799827我也造了个轮子:BeanMapping(属性拷贝)http://agapple.iteye.com/blog/1075671

相关推荐