用于java对象到对象映射的任何工具?

rav*_*kam 224 java mapping dto

我正在尝试使用java将DO转换为DTO并在开始编写自己的工具之前寻找自动化工具.我只是想知道是否有相同的免费工具.

Pas*_*ent 383

那边有一些图书馆:

  • Commons-BeanUtils:ConvertUtils - >实用程序方法,用于将String标量值转换为指定Class的对象,String数组转换为指定Class的数组.

  • Commons-Lang:ArrayUtils - >对数组,原始数组(如int [])和原始包装数组(如Integer [])的操作.

  • Spring框架:Spring对PropertyEditors有很好的支持,也可用于将对象转换为/从Strings转换.

  • Dozer:Dozer是一个功能强大但又简单的Java Bean到Java Bean映射器,可以递归地将数据从一个对象复制到另一个对象.通常,这些Java Bean将具有不同的复杂类型.

  • ModelMapper:ModelMapper是一个智能对象映射框架,可以自动将对象相互映射.它使用基于约定的方法映射对象,同时提供简单的重构安全API来处理特定用例.

  • MapStruct:MapStruct是用于bean映射的编译时代码生成器,在运行时导致快速(不使用反射或类似),无依赖和类型安全的映射代码.

  • Orika:Orika使用字节码生成来创建具有最小开销的快速映射器.

  • Selma:用于映射的编译时代码生成器

  • JMapper:使用Annotation,XML或API生成Bean映射器

  • Smooks:Smooks JavaBean Cartridge允许您从消息数据中创建和填充Java对象(即将数据绑定到)(由superfilin在评论中建议).(不再处于积极发展阶段)

  • Commons-Convert:Commons-Convert旨在提供一个专门用于将一种类型的对象转换为另一种类型的任务的库.第一阶段将重点关注Object to String和String to Object转换.(似乎死了,最后更新2010)

  • Transmorph:Transmorph是一个免费的java库,用于将一种类型的Java对象转换为另一种类型的对象(具有另一种签名,可能是参数化的).(似乎死了,最后更新2013)

  • EZMorph:EZMorph是一个简单的java库,用于将Object转换为另一个Object.它支持基元和对象的转换,用于多维数组和DynaBeans的转换(似乎死了,最后更新2008)

  • 变形:变形是一个Java框架,可以简化应用程序的内部互操作性.当信息流经应用程序时,它会经历多次转换.Morph提供了实现这些转换的标准方法.(似乎死了,最后更新2008)

  • Lorentz:Lorentz是一个通用的对象到对象转换框架.它提供了一个简单的API,用于将一种类型的Java对象转换为另一种类型的对象.(好像死了)

  • OTOM:使用OTOM,您可以将任何对象的任何数据复制到任何其他对象.可能性是无止境.欢迎来到"秋天".(好像死了)

  • Java 8+的另一个选择:http://erchu.github.io/bean-cp/(免责声明:我是这个项目的作者) (3认同)

ska*_*man 105

你可以试试Dozer.

Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象.通常,这些Java Bean将具有不同的复杂类型.

Dozer支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射.这包括映射还需要在元素级别进行映射的集合属性.

  • 很长一段时间之后,我来做一个更新,我希望我的评论会被读到:现在Dozer似乎已经死了,一个很好的选择是使用MapStruct,它很容易(支持注释),快速(没有反思) )并且看起来很安全(此刻).这包含在@Pascal Thivent列表中,但是我建议它(即使我使用它与lombok一起遇到了一些问题). (23认同)
  • 推土机似乎在版本6中复活了:https://mvnrepository.com/artifact/com.github.dozermapper/dozer-core (2认同)

小智 31

另一个是Orika - https://github.com/orika-mapper/orika

Orika是一个Java Bean映射框架,可以递归地将数据(以及其他功能)从一个对象复制到另一个对象.在开发多层应用程序时它非常有用.

Orika专注于尽可能自动化,同时根据需要通过配置和扩展提供定制.

Orika使开发人员能够:

  • 映射复杂和深层结构的对象
  • 通过将嵌套属性映射到顶级属性来"展平"或"展开"对象,反之亦然
  • 即时创建映射器,并应用自定义来控制部分或全部映射
  • 创建转换器,以完全控制对象图中任意位置的特定对象集的映射 - 按类型,甚至通过特定属性名称
  • 处理代理或增强对象(如Hibernate或各种模拟框架)
  • 使用一种配置应用双向映射
  • 映射到目标抽象类或接口的适当具体类的实例
  • 处理反向映射
  • 处理JavaBean规范之外的复杂约定.

Orika使用字节代码生成以最小的开销创建快速映射器.

  • 你可以提供一些关于orika的话 - 什么使它与其他人不同 (2认同)

Jon*_*han 21

ModelMapper是另一个值得一的库.ModelMapper的设计与其他库的不同之处在于:

  • 通过智能匹配源和目标属性自动映射对象模型
  • 提供重构安全映射API,它使用实际代码映射字段和方法,而不是使用字符串
  • 利用基于约定的配置来简单处理自定义方案

查看ModelMapper站点以获取更多信息:

http://modelmapper.org


Pab*_*jim 13

使用Apache commons beanutils:

static void copyProperties(Object dest, Object orig) - 对于属性名称相同的所有情况,从原始bean到目标bean的属性值.

http://commons.apache.org/proper/commons-beanutils/

  • 是的,但是源bean中的属性,但不在目标bean中的属性被简单地忽略.非常感谢Pablojim :)我想我必须和Dozer一起去,因为DO和DTO有一些不同的属性名称:( (3认同)

Dmi*_*try 6

还有一个Java映射引擎/框架Nomin:http://nomin.sourceforge.net.