63

目前有两个主要流行的 Java 对象到对象映射框架取代了 Dozer ( http://dozer.sourceforge.net/documentation/mappings.html ),它们是:

  1. 塞尔玛 - http://www.selma-java.org/
  2. MapStruct - http://mapstruct.org/

除了这个页面(http://vytas.io/blog/java/java-object-to-object-mapping-which-framework-to-choose-part-2/)我还没有找到网上很多关于哪个框架比另一个更好,或者在什么情况下它们更好。想知道是否有人可以对此有所了解。在基于文档的功能方面,他们似乎在做同样的事情。

4

2 回答 2

91

(这里是MapStruct的原作者,所以我自然有偏见)

事实上,这两个项目都基于在编译时生成映射代码的相同总体思路。我推荐你 MapStruct 的原因如下:

  • 经过验证且稳定的代码库:MapStruct 是两者中较老的一个,最初提出了映射生成的想法。根据许多不同项目的实际使用反馈,它已经经过很长一段时间的改进和完善;我们去年发布了稳定的 1.0 Final
  • 根据提交者( MapStructSelma)和用户问题(MapStructSelma)的数量,更大的开发人员和用户社区
  • 功能丰富(MapStruct 中支持的一些东西我在 Selma 文档中没有找到(同样的扩展)):
  • Eclipse 插件可用:仍在进行中,但它的快速修复和自动完成在设计映射器界面时已经非常有用
  • IntelliJ 插件:通过自动完成编辑映射器接口时提供帮助,转到引用的属性,重构支持等。
于 2016-01-14T17:24:54.207 回答
90

(塞尔玛原作者观点略有不同)

Selma 和 MapStruct 做同样的工作,但有一些不同。首先,Selma 生成的代码似乎比 MapStruct 快一点(http://javaetmoi.com/wp-content/uploads/2015/09/2015-09-mapping-objet-objet2.png)。0.13 版本号并不能真正反映代码的成熟度 Selma 稳定且健壮,已在生产环境中使用了 2 年。

Selma 背后的主要思想是禁止魔法转换,只是自动化所有映射而没有任何副作用。当映射看起来过于复杂时,开发者应该使用自定义映射或拦截器自行处理。

Selma 的占用空间尽可能小,我们只依赖 JavaWriter 和 JDK。

Selma 尝试只使用静态编译生成的代码,在运行时没有任何反射或写入字符串字段的伪代码。

您可以使用组合来构建映射器链,并且在单个映射器内,您可以拥有可以基于每个方法覆盖的全局配置。

编译器消息旨在为开发人员提供早期反馈、解决问题的提示和学习 API。

最后肯定 MapStruct 功能更丰富,但 Selma 为开发人员提供了复杂映射所需的所有工具,并负责编写业务逻辑。从用户的角度来看,您还可以发现这 2 个 API 中的一个比另一个更好,因此最好的办法是尝试两者并选择您觉得更舒服的一个。这不会很耗时。

于 2016-02-10T23:22:30.447 回答