【问题标题】:Alternative to dozer for bean mapping? [closed]bean映射推土机的替代品? [关闭]
【发布时间】:2010-12-20 12:29:57
【问题描述】:

我正在尝试找出一种无需样板代码即可将 DTO 映射到实体的简单方法。当我考虑使用推土机时,它似乎需要大量的 xml 配置。有人见过使用 DSL 在纯 Java 中配置 bean 映射的推土机替代方案吗?

理想情况下,我希望找到一个受 Guice 做事方式启发的 bean 映射器。

【问题讨论】:

  • 另一个选项是jtransfo.org。这允许使用 TO 上的注释来定义映射。它具有附加功能,您可以根据标签进行安全/可选转换。
  • 看看github.com/amgohan/zebra:(DIY对象映射和使用zebra的统一方式注入映射器。)Zebra提供了一个简单而统一的方法:创建你的映射器;在一个类中管理一种方式和反向映射;注册您的映射器并在您的应用程序的任何地方重用它们;管理深度映射。
  • 这是一个不错的选择:modelmapper.org
  • 现在(从 5.3.2 版开始)Dozer 支持annotation mappings。无法通过命名(隐式)派生的附加映射可以通过 Xml、Annotations 或 API 添加。

标签: guice dto dozer dto-mapping


【解决方案1】:

Orika

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

【讨论】:

  • Orika 为我完成了这项工作,毫不费力地处理了集合映射案例。非常强大且可用的库 IMO。
【解决方案2】:

我也在寻找替代品。

Here 很好地涵盖了不同的选项。

【讨论】:

    【解决方案3】:

    在我看来,映射一些特殊属性的配置或java代码总是需要的。

    这里我想以DODTO为例

    DO:{
        id: "id",
        name:"name",
        doName1: "doName1",
        nestedObj: {
            id: "nestedObjId",
            name: "nestedObjName"
        }
    }
    
    DTO{
        id: "",
        name: "",
        name1: ""   // for mapping doName1 in DO.
        nestedId: "", //for DT.nestObj.id
        nestedName: "", //for DT.nestObj.name
    }
    

    对于 Dozer 或 Orika,它们都可以自动匹配 DO 和 DTO 之间的 id 和 name 属性,无需任何配置或 java 代码,因为它们具有相同的属性名称和类型。 但是如果你想DO.doName1 DTO.name1DO.nestedObj.id DTO.nestedId 你需要做一些配置(通过xml或java)告诉映射工具你打算去做。 我认为对于您的用例,Dozer、Orika 和 ModelMapper 都可以。但对我来说,出于性能目的,我将我的项目从推土机切换到 Orika。虽然 Orika 没有推土机那么成熟,但没有那么智能,需要我做很多额外的工作来维护我的自定义映射配置。 如果您的项目不太关心性能,我会推荐您推土机,它非常易于使用并支持如此多的高级功能。否则,如果您购买高性能,我建议您使用 orika。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多