Java mapping: Selma vs MapStruct [已关闭]

2022-08-31 15:17:07

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

  1. 塞尔玛 - http://www.selma-java.org/
  2. 地图结构 - http://mapstruct.org/

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


答案 1

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

实际上,这两个项目都基于在编译时生成映射代码的相同一般想法;我推荐你MapStruct,原因如下:

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

答案 2

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

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中的一个比另一个更好的API,因此最好的办法是尝试两者并选择您觉得更舒服的一个。它不会很耗时。


推荐