241

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

4

9 回答 9

405

周围有一些图书馆:

  • Commons-BeanUtils : ConvertUtils -> 实用方法,用于将字符串标量值转换为指定类的对象,将字符串数组转换为指定类的数组。

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

  • Spring 框架:Spring 对 PropertyEditor 提供了极好的支持,它也可以用于将对象转换为字符串/从字符串转换。

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

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

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

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

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

  • JMapper : 使用 Annotation、XML 或 API 生成 Bean 映射器(似乎已死,最后更新于 2 年前)

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

  • Commons-Convert:Commons-Convert 旨在提供一个单一的库,专门用于将一种类型的对象转换为另一种类型的任务。第一阶段将关注对象到字符串和字符串到对象的转换。(似乎死了,最后一次更新 2010)

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

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

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

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

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

于 2009-09-16T13:27:46.790 回答
107

你可以试试推土机

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

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

于 2009-09-16T12:52:20.317 回答
32

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

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

Orika 专注于尽可能实现自动化,同时在需要时通过配置和扩展提供定制。

Orika 使开发人员能够:

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

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

于 2011-06-15T10:50:27.117 回答
22

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

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

查看 ModelMapper 网站了解更多信息:

http://modelmapper.org

于 2011-06-22T19:25:50.910 回答
14

使用 Apache commons beanutils:

static void copyProperties(Object dest, Object orig) - 对于属性名称相同的所有情况,将属性值从源 bean 复制到目标 bean。

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

于 2009-09-16T13:05:17.897 回答
6

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

于 2010-12-09T22:34:23.783 回答
3

我建议你试试JMapper 框架

它是一个 Java bean 到 Java bean 的映射器,允许您使用注释和/或 XML 动态执行数据的传递。

使用 JMapper,您可以:

  • 创建和丰富目标对象
  • 将特定逻辑应用于映射
  • 自动管理 XML 文件
  • 实现 1 对 N 和 N 对 1 关系
  • 实现显式转换
  • 应用继承的配置
于 2012-09-04T16:13:22.900 回答
2

我很高兴将 Moo 添加为一个选项,但显然我偏向于它: http: //geoffreywiseman.github.com/Moo/

对于简单的情况,它非常容易使用,对于更复杂的情况也很合理,尽管我仍然可以想象在某些领域可以增强它以应对更复杂的情况。

于 2011-04-21T15:36:17.330 回答
2

您也可以尝试基于 Dozer 的映射框架,但使用 Excel 映射声明。他们有一些工具和其他很酷的功能。检查http://openl-tablets.sf.net/mapper

于 2011-06-20T10:42:06.733 回答