Java映射:Selma与MapStruct

Jac*_*Dev 56 java mapping mapstruct

目前有两个主要的Java Object to Object映射框架取代了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/)我还没找到关于哪个框架比另一个更好,或者在什么情况下它们更好的在线.想知道是否有人可以对此有所了解.在基于文档的功能方面,它们似乎在做同样的事情.

Gun*_*nar 81

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

实际上,这两个项目都基于在编译时生成映射代码的相同的总体思路; 我建议您使用MapStruct,原因如下:

  • 经过验证和稳定的代码库:MapStruct是两者中较老的一个,最初提出了映射生成的想法.根据许多不同项目中使用的实际反馈,它在相当长的时间内得到了增强和完善.我们去年发布了稳定的1.0决赛
  • 根据提交者数量(MapStruct,Selma)和用户问题(MapStruct,Selma)提供更大的开发人员和用户社区
  • 功能丰富(MapStruct支持的一些东西我没有在Selma文档中找到(相同的扩展)):
  • Eclipse插件可用:仍在进行中,但在设计映射器接口时,其快速修正和自动完成功能已经非常有用
  • IntelliJ插件:在通过自动完成编辑映射器接口,转到引用的属性,重构支持等时提供帮助.


sle*_*sle 79

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

Selma和MapStruct在完成同样的工作时会有一些差异.首先看来,Selma生成的代码比MapStruct(http://javaetmoi.com/wp-content/uploads/2015/09/2015-09-mapping-objet-objet2.png)快一点.0.13版本号并未真正反映代码的成熟度.塞尔玛稳定且稳健,在生产中使用2年.

Selma背后的主要思想是禁止魔术转换,只是自动化所有映射而没有任何副作用.当映射看起来太复杂时,开发人员应该使用自定义映射或拦截器自己处理它.

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

Selma尝试仅使用静态编译生成的代码而不在运行时进行任何反射或在字符串字段中编写伪代码.

您可以使用合成来构建映射器链,并且在单个映射器中,您可以使用可以基于每个方法覆盖的全局配置.

编译器消息旨在为开发人员提供早期反馈,解决问题的技巧和学习API.

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

  • 两位原作者讨论.我喜欢Stackoverflow. (33认同)
  • 提供图片而没有关于测试台和基准测试本身的任何信息只是一个推测.这里有更具代表性的来源:https://github.com/arey/java-object-mapper-benchmark (4认同)
  • 只是一个简短的更新,分享Selma 1.0的可用性,它现在处理我从一开始就期望的所有功能. (3认同)