考量要素:
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 | 最新版本 | URL |
Transmorph | 只是不同類型間的互轉,和需求相去勝遠 | N | 3.1.3 | https://github.com/cchabanois/transmorph |
Commons-Lang | ArrayUtils也只是不同類型間的互轉 | N | 3.1 | http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils.html |
Commons-Convert | 也只是不同類型間的互轉,目前在apache的sandbox里 | N | 1.0-SNAPSHOT | http://commons.apache.org/sandbox/commons-convert |
Spring framework | PropertyEditors也只是不同類型間的互轉 | N | ||
EZMorph | 能同類型同名屬性批量copy | N | 1.0.6 | http://sourceforge.net/projects/ezmorph/ |
Commons-BeanUtils | BeanUtils只能同類型同名屬性批量copy,PropertyUtils可以用類似ognl表達式copy嵌套的屬性,但這個東西的性能被吐槽不好 | Y | 1.8.3 | http://commons.apache.org/proper/commons-beanutils/ |
Morph | 沒找到文檔 | 1.1.1 | http://sourceforge.net/projects/morph/ | |
Lorentz | 似乎死了 | |||
OTOM | "Autumn"沒找到文檔 | https://java.net/projects/otom | ||
Smooks | 沒找到文檔,貌似可以多種格式比如csv,java bean,jms消息互轉,不是我們的需求場景 | https://github.com/smooks/smooks http://www.infoq.com/cn/articles/event-streaming-with-smooks | ||
JMapper | 支持annotaion描述映射 | N | 1.2 | http://code.google.com/p/jmapper-framework/ |
cglib | BeanCopier, BulkBean,BeanMap,FastClass/FastMethod 采用生成字節碼的方法,性能相當的高 | N | 2.3 | sourceforge.net/projects/cglib |
ognl | ognl表達式肯定功能強大 | Y | 4.0-SNAPSHOT | http://commons.apache.org/proper/commons-ognl/ |
mapping4java | 國人造的一個輪子,性能不錯 | N | 1.0 | http://code.google.com/p/mapping4java/ |
Dozer | 貌似功能比較強大,可通過xml來配置映射,但性能不行 | Y | 5.4 | https://github.com/DozerMapper/dozer |
Orika | 一個新秀,比Dozer性能好,可以一試,但沒找到配xml的方法 | Y | 1.4.2 | http://orika-mapper.github.io/orika-docs/index.html |
ModelMapper | 采用約定優於配置的方式自動映射 | Y | 0.5.6 | http://modelmapper.org |