qualche strumento per la mappatura di oggetti java a oggetti? [chiuso]


231

Sto cercando di convertire DO in DTO usando Java e cerco uno strumento automatico prima di iniziare a scrivere il mio. Volevo solo sapere se ci sono strumenti gratuiti disponibili per lo stesso.


1
Jackson (la libreria JSON) ha un metodo new ObjectMapper().convertValue(...). Jackson ha anche il supporto per le annotazioni e le annotazioni-mixin, quindi la trovo un'ottima opzione.
Simon Forsberg,

1
Ecco un articolo con diversi framework e confronto delle prestazioni. baeldung.com/java-performance-mapping-frameworks
Christian,

Risposte:


105

Potresti provare Dozer .

Dozer è un mappatore da bean Java a bean Java che copia ricorsivamente i dati da un oggetto a un altro. In genere, questi bean Java saranno di diversi tipi complessi.

Dozer supporta la mappatura semplice delle proprietà, la mappatura di tipi complessi, la mappatura bidirezionale, la mappatura esplicita implicita e la mappatura ricorsiva. Ciò include la mappatura degli attributi di raccolta che richiedono anche la mappatura a livello di elemento.


24
Molto molto tempo dopo, vengo a fare un aggiornamento, spero che il mio commento venga letto: ora Dozer sembra essere morto e una buona opzione è usare MapStruct, è facile (supporta le annotazioni), veloce (nessuna riflessione ) e sembra sicuro (al momento). Questo è incluso nell'elenco di @Pascal Thivent, sebbene, ma lo consiglio (anche se ho avuto dei problemi usandolo insieme a lombok).
Alex,

2
Dozer sembra rianimato con la versione 6: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

Ci sono alcune librerie lì intorno:

  • Commons-BeanUtils : ConvertUtils -> Metodi di utilità per convertire valori scalari di String in oggetti della Classe specificata, array di String in array della Classe specificata.

  • Commons-Lang : ArrayUtils -> Operazioni su array, array primitivi (come int []) e array wrapper primitivi (come Integer []).

  • Spring framework : Spring offre un eccellente supporto per PropertyEditor, che può essere utilizzato anche per trasformare gli oggetti in / da stringhe.

  • Dozer : Dozer è un potente ma semplice mappatore da Java Bean a Java Bean che copia ricorsivamente i dati da un oggetto a un altro. In genere, questi bean Java saranno di diversi tipi complessi.

  • ModelMapper : ModelMapper è un framework di mappatura oggetti intelligente che mappa automaticamente gli oggetti tra loro. Utilizza un approccio basato su una convenzione per mappare gli oggetti fornendo al contempo un semplice API di refactoring sicuro per la gestione di casi d'uso specifici.

  • MapStruct : MapStruct è un generatore di codice in fase di compilazione per i mapping dei bean, che consente di eseguire rapidamente il codice di mapping (senza utilizzo di riflessioni o simili), privo di dipendenze e di tipo sicuro.

  • Orika : Orika utilizza la generazione del codice byte per creare mappatori veloci con un sovraccarico minimo.

  • Selma : generatore di codice in fase di compilazione per i mapping

  • JMapper : generazione del mapper di bean utilizzando Annotation, XML o API (sembra morto, ultimo aggiornamento 2 anni fa)

  • Smooks : la cartuccia JavaBean di Smooks consente di creare e popolare oggetti Java dai dati dei messaggi (ad es. Dati di bind a) (suggeriti da superfilin nei commenti). (Non più in fase di sviluppo attivo)

  • Commons-Convert : Commons-Convert mira a fornire un'unica libreria dedicata al compito di convertire un oggetto di un tipo in un altro. Il primo stadio si concentrerà sulle conversioni da oggetto a stringa e da stringa a oggetto. (sembra morto, ultimo aggiornamento 2010)

  • Transmorph : Transmorph è una libreria java gratuita utilizzata per convertire un oggetto Java di un tipo in un oggetto di un altro tipo (con un'altra firma, possibilmente parametrizzata). (sembra morto, ultimo aggiornamento 2013)

  • EZMorph : EZMorph è una semplice libreria Java per trasformare un oggetto in un altro oggetto. Supporta trasformazioni per primitive e oggetti, per array multidimensionali e trasformazioni con DynaBeans (sembra morto, ultimo aggiornamento 2008)

  • Morph : Morph è un framework Java che facilita l'interoperabilità interna di un'applicazione. Man mano che l'informazione scorre attraverso un'applicazione, subisce molteplici trasformazioni. Morph fornisce un modo standard per implementare queste trasformazioni. (sembra morto, ultimo aggiornamento 2008)

  • Lorentz : Lorentz è un generico framework di conversione da oggetto a oggetto. Fornisce una semplice API per convertire oggetti Java di un tipo in un oggetto di un altro tipo. (sembra morto)

  • OTOM : con OTOM, è possibile copiare qualsiasi dato da qualsiasi oggetto a qualsiasi altro oggetto. Le possibilità sono infinite. Benvenuti in "autunno". (sembra morto)


nessuno dell'elenco supporta le annotazioni :(
ravinikam,

1
Commons-Convert sembra non solo inattivo ma completamente sparito ora ...
Jim Ferrans

In realtà, se vuoi aggiungere Moo al tuo elenco, allora posso rimuovere la mia risposta, poiché la tua risposta è chiaramente molto più completa. ;)
Geoffrey Wiseman il

3
Un'altra opzione per Java 8+: erchu.github.io/bean-cp (disclaimer: sono l'autore di questo progetto)
Rafal

1
@TmTron: Fatto e ho modificato la risposta per rimuovere lo strike e fare riferimento all'URL del repository (poiché la pagina principale fa ancora riferimento allo 0.7.5)
patric.schenke,

31

Un altro è Orika - https://github.com/orika-mapper/orika

Orika è un framework di mapping Java Bean che copia in modo ricorsivo (tra le altre funzionalità) i dati da un oggetto a un altro. Può essere molto utile durante lo sviluppo di applicazioni multistrato.

Orika si concentra sull'automazione il più possibile, fornendo al contempo personalizzazione attraverso la configurazione e l'estensione dove necessario.

Orika consente allo sviluppatore di:

  • Mappa oggetti complessi e profondamente strutturati
  • "Appiattisci" o "Espandi" oggetti mappando le proprietà nidificate sulle proprietà di livello superiore e viceversa
  • Crea mapper al volo e applica le personalizzazioni per controllare parte o tutto il mapping
  • Crea convertitori per il controllo completo sulla mappatura di un insieme specifico di oggetti in qualsiasi punto del grafico degli oggetti, per tipo o anche per nome di proprietà specifico
  • Gestisci proxy o oggetti migliorati (come quelli di Hibernate o i vari framework finti)
  • Applica mappatura bidirezionale con una configurazione
  • Mappare le istanze di una classe concreta appropriata per una classe o interfaccia astratta di destinazione
  • Gestisci mappature inverse
  • Gestisci convenzioni complesse oltre le specifiche JavaBean.

Orika utilizza la generazione del codice byte per creare mappatori veloci con un sovraccarico minimo.


2
potresti fornire qualche parola su orika - ciò che lo rende diverso dagli altri
Olimpiu POP

Probabilmente è molto più veloce di Dozer: il dozer è abbastanza lento.
Ondrej Bozek,

21

ModelMapper è un'altra libreria che vale la pena provare . Il design di ModelMapper è diverso dalle altre librerie in quanto:

  • Mappa automaticamente i modelli di oggetti abbinando in modo intelligente le proprietà di origine e destinazione
  • Fornisce un'API di mappatura sicura per il refactoring che utilizza il codice effettivo per mappare campi e metodi anziché utilizzare stringhe
  • Utilizza una configurazione basata su convenzione per una semplice gestione di scenari personalizzati

Controlla il sito ModelMapper per maggiori informazioni:

http://modelmapper.org


13

Usa beanutils comuni di Apache:

static void copyProperties(Object dest, Object orig) -Copia i valori delle proprietà dal bean di origine al bean di destinazione per tutti i casi in cui i nomi delle proprietà sono uguali.

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


3
sì, ma le proprietà che si trovano nel bean di origine, ma non nel bean di destinazione, vengono semplicemente ignorate. Grazie comunque Pablojim :) Penso di dover andare con Dozer poiché abbiamo alcuni nomi di proprietà diversi per DO e DTO :(
ravinikam,

1
Abbastanza giusto - non lo sapevo ... L'elenco di Pascal era piuttosto impressionante!
Pablojim,


3

Ti suggerisco di provare JMapper Framework .

Si tratta di un bean Java per mappatore bean Java, consente di eseguire il passaggio di dati in modo dinamico con annotazioni e / o XML.

Con JMapper puoi:

  • Crea e arricchisci oggetti target
  • Applicare una logica specifica alla mappatura
  • Gestisci automaticamente il file XML
  • Implementare le relazioni da 1 a N e da N a 1
  • Implementa conversioni esplicite
  • Applica configurazioni ereditate

2

Sono felice di aggiungere Moo come opzione, anche se chiaramente sono di parte: http://geoffreywiseman.github.com/Moo/

È molto facile da usare per casi semplici, ragionevole per casi più complessi, anche se ci sono ancora alcune aree in cui posso immaginare di migliorarlo per ulteriori complessità.


2

Puoi anche provare il framework di mappatura basato su Dozer, ma con la dichiarazione di mappatura di Excel. Hanno alcuni strumenti e altre fantastiche funzionalità. Controlla su http://openl-tablets.sf.net/mapper

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.