un outil pour le mappage objet java? [fermé]


231

J'essaie de convertir DO en DTO en utilisant java et en recherchant un outil automatisé avant de commencer à écrire le mien. Je voulais juste savoir s'il y avait un outil gratuit disponible pour le même.


1
Jackson (la bibliothèque JSON) a une méthode new ObjectMapper().convertValue(...). Jackson prend également en charge les annotations et les mix-annotations, donc je trouve que c'est une très bonne option.
Simon Forsberg

1
Voici un article avec différents cadres et comparaison de performances. baeldung.com/java-performance-mapping-frameworks
Christian

Réponses:


105

Vous pouvez essayer Dozer .

Dozer est un mappeur Java Bean vers Java Bean qui copie récursivement les données d'un objet à un autre. En règle générale, ces Java Beans seront de différents types complexes.

Dozer prend en charge le mappage de propriétés simple, le mappage de types complexes, le mappage bidirectionnel, le mappage implicite-explicite, ainsi que le mappage récursif. Cela inclut le mappage des attributs de collection qui doivent également être mappés au niveau de l'élément.


24
Très très longtemps après, je viens de faire une mise à jour, j'espère que mon commentaire sera lu: maintenant Dozer semble être un mort, et une bonne option est d'utiliser MapStruct, c'est facile (annotations de support), rapide (pas de réflexion) ) et semble sécurisé (pour le moment). Cela est inclus dans la liste @Pascal Thivent, mais je le conseille (même si j'ai eu quelques problèmes en l'utilisant avec lombok).
Alex

2
Dozer semble ravivé avec la version 6: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

Il y a quelques bibliothèques par là:

  • Commons-BeanUtils : ConvertUtils -> Méthodes utilitaires pour convertir les valeurs scalaires String en objets de la classe spécifiée, tableaux de chaînes en tableaux de la classe spécifiée.

  • Commons-Lang : ArrayUtils -> Opérations sur les tableaux, les tableaux primitifs (comme int []) et les tableaux d'encapsuleurs primitifs (comme Integer []).

  • Framework Spring : Spring a un excellent support pour PropertyEditors, qui peut également être utilisé pour transformer des objets vers / depuis des chaînes.

  • Dozer : Dozer est un mappeur Java Bean puissant mais simple qui copie récursivement des données d'un objet à un autre. En règle générale, ces Java Beans seront de différents types complexes.

  • ModelMapper : ModelMapper est un cadre de mappage d'objets intelligent qui mappe automatiquement les objets les uns aux autres. Il utilise une approche conventionnelle pour mapper des objets tout en fournissant une API sécurisée de refactorisation simple pour gérer des cas d'utilisation spécifiques.

  • MapStruct : MapStruct est un générateur de code au moment de la compilation pour les mappages de bean, résultant en un code de mappage rapide (sans utilisation de réflexion ou similaire), sans dépendance et sans danger pour les types lors de l'exécution.

  • Orika : Orika utilise la génération de code octet pour créer des mappeurs rapides avec une surcharge minimale.

  • Selma : générateur de code à la compilation pour les mappages

  • JMapper : génération de mappeur de bean en utilisant Annotation, XML ou API (semble mort, dernière mise à jour il y a 2 ans)

  • Smooks : La cartouche Smooks JavaBean vous permet de créer et de remplir des objets Java à partir de vos données de message (c'est-à-dire de lier des données à) (suggéré par superfilin dans les commentaires). (Plus en développement actif)

  • Commons-Convert : Commons-Convert vise à fournir une bibliothèque unique dédiée à la tâche de convertir un objet d'un type en un autre. La première étape se concentrera sur les conversions objet en chaîne et chaîne en objet. (semble mort, dernière mise à jour 2010)

  • Transmorph : Transmorph est une bibliothèque java gratuite utilisée pour convertir un objet Java d'un type en un objet d'un autre type (avec une autre signature, éventuellement paramétrée). (semble mort, dernière mise à jour 2013)

  • EZMorph : EZMorph est une bibliothèque java simple pour transformer un objet en un autre objet. Il prend en charge les transformations pour les primitives et les objets, pour les tableaux multidimensionnels et les transformations avec DynaBeans (semble mort, dernière mise à jour 2008)

  • Morph : Morph est un framework Java qui facilite l'interopérabilité interne d'une application. Au fur et à mesure que l'information circule dans une application, elle subit de multiples transformations. Morph fournit un moyen standard d'implémenter ces transformations. (semble mort, dernière mise à jour 2008)

  • Lorentz : Lorentz est un cadre générique de conversion objet à objet. Il fournit une API simple pour convertir un objet Java d'un type en un objet d'un autre type. (semble mort)

  • OTOM : Avec OTOM, vous pouvez copier toutes les données d'un objet vers un autre objet. Les possibilités sont infinies. Bienvenue à "Autumn". (semble mort)


aucune de la liste ne prend en charge l'annotation :(
ravinikam

1
Commons-Convert semble non seulement en sommeil mais complètement disparu maintenant ...
Jim Ferrans

En fait, si vous souhaitez ajouter Moo à votre liste, je peux supprimer ma réponse, car votre réponse est clairement beaucoup plus complète. ;)
Geoffrey Wiseman

3
Une autre option pour Java 8+: erchu.github.io/bean-cp (clause de non-responsabilité: je suis l'auteur de ce projet)
Rafal

1
@TmTron: Terminé et j'ai modifié la réponse pour supprimer la grève et référencer l'URL du dépôt (car la page principale fait toujours référence à 0.7.5)
patric.schenke

31

Un autre est Orika - https://github.com/orika-mapper/orika

Orika est un framework de mappage Java Bean qui copie récursivement (entre autres capacités) des données d'un objet à un autre. Il peut être très utile lors du développement d'applications multicouches.

Orika se concentre sur l'automatisation autant que possible, tout en offrant une personnalisation via la configuration et l'extension si nécessaire.

Orika permet au développeur de:

  • Cartographie d'objets complexes et profondément structurés
  • "Aplatir" ou "étendre" les objets en mappant les propriétés imbriquées aux propriétés de niveau supérieur, et vice versa
  • Créez des mappeurs à la volée et appliquez des personnalisations pour contrôler tout ou partie du mappage
  • Créez des convertisseurs pour un contrôle complet sur le mappage d'un ensemble spécifique d'objets n'importe où dans le graphique d'objet - par type, ou même par nom de propriété spécifique
  • Gérer les proxys ou les objets améliorés (comme ceux d'Hibernate ou les différents frameworks fictifs)
  • Appliquer un mappage bidirectionnel avec une configuration
  • Mapper aux instances d'une classe concrète appropriée pour une classe ou une interface abstraite cible
  • Gérer les mappages inversés
  • Gérez des conventions complexes au-delà des spécifications JavaBean.

Orika utilise la génération de code octet pour créer des mappeurs rapides avec une surcharge minimale.


2
vous pourriez fournir quelques mots sur orika - ce qui le rend différent des autres
Olimpiu POP

C'est probablement beaucoup plus rapide que Dozer - le bulldozer est calme et lent.
Ondrej Bozek

21

ModelMapper est une autre bibliothèque à découvrir. La conception de ModelMapper est différente des autres bibliothèques en ce qu'elle:

  • Mappe automatiquement les modèles d'objets en faisant correspondre intelligemment les propriétés source et destination
  • Fournit une API de mappage sûre de refactorisation qui utilise le code réel pour mapper les champs et les méthodes plutôt que d'utiliser des chaînes
  • Utilise une configuration basée sur les conventions pour une gestion simple des scénarios personnalisés

Consultez le site ModelMapper pour plus d'informations:

http://modelmapper.org


13

Utilisez les beanutils Apache commons:

static void copyProperties(Object dest, Object orig) -Copiez les valeurs de propriété du bean d'origine au bean de destination pour tous les cas où les noms de propriété sont les mêmes.

http://commons.apache.org/proper/commons-beanutils/


3
yeh, mais les propriétés qui sont dans le bean source, mais pas dans le bean de destination sont simplement ignorées. Merci quand même Pablojim :) Je pense que je dois aller avec Dozer car nous avons des noms de propriétés différents pour DO et DTO :(
ravinikam

1
Assez juste - je ne le savais pas ... La liste de Pascal était assez impressionnante!
Pablojim


3

Je vous suggère d'essayer JMapper Framework .

Il s'agit d'un mappeur Java bean vers Java bean, vous permettant d'effectuer le passage de données dynamiquement avec des annotations et / ou XML.

Avec JMapper, vous pouvez:

  • Créer et enrichir des objets cibles
  • Appliquer une logique spécifique au mappage
  • Gérer automatiquement le fichier XML
  • Mettre en œuvre les relations 1 à N et N à 1
  • Mettre en œuvre des conversions explicites
  • Appliquer des configurations héritées

2

Je suis heureux d'ajouter Moo en option, bien que je sois clairement partisan: http://geoffreywiseman.github.com/Moo/

Il est très facile à utiliser pour les cas simples, raisonnablement capable pour les cas plus complexes, bien qu'il y ait encore des domaines où j'imagine l'améliorer pour encore plus de complexité.


2

Vous pouvez également essayer un cadre de mappage basé sur Dozer, mais avec une déclaration de mappage Excel. Ils ont quelques outils et fonctionnalités supplémentaires intéressantes. Vérifiez à http://openl-tablets.sf.net/mapper

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.