2009-11-25 82 views
17

我想弄清楚一个简单的方法来将DTO映射到没有boiler-plate代码的实体。虽然我想使用推土机,但似乎需要大量的xml配置。有没有人看到使用DSL来配置纯Java中的bean映射的推土机替代品?替代推土机的bean映射?

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

+0

另一种选择是http://jtransfo.org/。这允许使用TO上的注释来定义映射。它具有附加功能,您可以根据标签进行安全/可选转换。 – 2013-07-08 09:37:00

+1

看看https://github.com/amgohan/zebra/ :(DIY对象映射,并使用斑马为统一的方式来注入mappers。) 斑马来一个简单和统一的方式来: 创建您的mappers; 管理一个类中的单向和反向映射; 注册您的映射器并在您的应用程序的任何位置重新使用它们; 管理深度映射。 – amgohan 2015-05-29 12:56:48

+0

这是一个很好的选择:http://modelmapper.org/ – cosbor11 2015-08-20 02:57:33

回答

9

我正在寻找替代品。

Here是一个很好的覆盖不同的选项。

16

看看Orika

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

+0

Orika为我完成了这项工作,没有多少努力就处理了集合映射案例。非常强大和可用的库IMO。 – 2017-01-04 06:50:19

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 
} 

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