jakieś narzędzie do mapowania obiektu Java na obiekt? [Zamknięte]


231

Próbuję przekonwertować DO na DTO przy użyciu java i szukam automatycznego narzędzia, zanim zacznę pisać własne. Chciałem tylko wiedzieć, czy jest dostępne darmowe narzędzie do tego samego.


1
Jackson (biblioteka JSON) ma metodę new ObjectMapper().convertValue(...). Jackson ma również obsługę adnotacji i miksów adnotacji, więc uważam, że jest to bardzo dobra opcja.
Simon Forsberg,

1
Oto artykuł z różnymi ramami i porównaniem wydajności. baeldung.com/java-performance-mapping-frameworks
Christian

Odpowiedzi:


105

Możesz spróbować Dozera .

Dozer to program mapujący Java Bean na Java Bean, który rekurencyjnie kopiuje dane z jednego obiektu do drugiego. Zazwyczaj te komponenty Java Beans będą różnych typów złożonych.

Dozer obsługuje proste mapowanie właściwości, mapowanie typów złożonych, mapowanie dwukierunkowe, mapowanie jawne jawne, a także mapowanie rekurencyjne. Obejmuje to atrybuty kolekcji mapowań, które również wymagają mapowania na poziomie elementu.


24
Bardzo, bardzo długo potem, przychodzę zrobić aktualizację, mam nadzieję, że mój komentarz zostanie przeczytany: Teraz Dozer wydaje się martwy, a dobrą opcją jest użycie MapStruct, jest łatwe (adnotacje pomocnicze), szybkie (bez refleksji) ) i wydaje się bezpieczny (w tej chwili). Jest to uwzględnione na liście @Pascal Thivent, ale radzę to (nawet jeśli miałem problemy z używaniem go razem z lombokiem).
Alex

2
Wydaje się, że Dozer został przywrócony do życia w wersji 6: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

W okolicy jest kilka bibliotek:

  • Commons-BeanUtils : ConvertUtils -> Metody użyteczne do konwersji wartości skalarnych String na obiekty określonej klasy, Tablice String na tablice określonej klasy.

  • Commons-Lang : ArrayUtils -> Operacje na tablicach, tablicach pierwotnych (jak int []) i pierwotnych tablicach opakowujących (jak Integer []).

  • Struktura Spring : Spring ma doskonałe wsparcie dla PropertyEditors, które mogą być również używane do przekształcania obiektów do / z ciągów.

  • Dozer : Dozer to potężny, ale prosty program mapujący Java Bean na Java Bean, który rekurencyjnie kopiuje dane z jednego obiektu do drugiego. Zazwyczaj te komponenty Java Beans będą różnych typów złożonych.

  • ModelMapper : ModelMapper to inteligentna struktura mapowania obiektów, która automatycznie mapuje obiekty względem siebie. Wykorzystuje podejście oparte na konwencji do mapowania obiektów, zapewniając jednocześnie prosty interfejs API do refaktoryzacji do obsługi określonych przypadków użycia.

  • MapStruct : MapStruct to generator kodu czasu kompilacji do mapowania komponentów bean, w wyniku którego powstaje szybki (bez użycia odbicia lub podobny), bez zależności i bezpieczny typ kodu w czasie wykonywania.

  • Orika : Orika używa generowania kodu bajtowego do tworzenia szybkich mapowań przy minimalnym nakładzie pracy.

  • Selma : Generator kodu czasu kompilacji dla mapowań

  • JMapper : Generowanie mapowania komponentów Bean za pomocą Adnotacji, XML lub API (wydaje się martwe, ostatnia aktualizacja 2 lata temu)

  • Smooks : Kaseta JavaBean Smooks pozwala tworzyć i wypełniać obiekty Java z danych wiadomości (tj. Powiązać dane z) (sugerowane przez superfilin w komentarzach). (Nie jest już aktywnie rozwijany)

  • Commons-Convert : Commons-Convert ma na celu zapewnienie pojedynczej biblioteki dedykowanej do konwersji obiektu jednego typu na inny. Pierwszy etap skupi się na konwersji obiektu na ciąg i ciągu na obiekt. (wydaje się martwy, ostatnia aktualizacja 2010)

  • Transmorph : Transmorph to darmowa biblioteka Java służąca do konwersji obiektu Java jednego typu na obiekt innego typu (z inną sygnaturą, ewentualnie sparametryzowaną). (wydaje się martwy, ostatnia aktualizacja 2013)

  • EZMorph : EZMorph to prosta biblioteka Java do przekształcania obiektu w inny obiekt. Obsługuje transformacje dla prymitywów i obiektów, dla wielowymiarowych tablic i transformacji za pomocą DynaBeans (wydaje się martwy, ostatnia aktualizacja 2008)

  • Morph : Morph to framework Java, który ułatwia wewnętrzną interoperacyjność aplikacji. Gdy informacja przepływa przez aplikację, przechodzi wiele transformacji. Morph zapewnia standardowy sposób realizacji tych przekształceń. (wydaje się martwy, ostatnia aktualizacja 2008)

  • Lorentz : Lorentz to ogólny framework konwersji obiekt-obiekt. Zapewnia prosty interfejs API do konwersji obiektów Java jednego typu na obiekt innego typu. (wydaje się martwy)

  • OTOM : Za pomocą OTOM możesz kopiować dowolne dane z dowolnego obiektu do dowolnego innego obiektu. Możliwości są nieskończone. Witamy w „Jesieni”. (wydaje się martwy)


żaden z adnotacją lista Stojaki :(
ravinikam

1
Commons-Convert wydaje się nie tylko uśpiony, ale kompletnie zniknął ...
Jim Ferrans

Właściwie, jeśli chcesz dodać Moo do swojej listy, mogę usunąć moją odpowiedź, ponieważ twoja odpowiedź jest zdecydowanie bardziej kompletna. ;)
Geoffrey Wiseman

3
Inna opcja dla Java 8+: erchu.github.io/bean-cp (zrzeczenie się: Jestem autorem tego projektu)
Rafal

1
@TmTron: Zrobiliśmy i ja zredagowaliśmy odpowiedź, aby usunąć ostrzeżenie i odwołać się do adresu URL repozytorium (ponieważ strona główna wciąż odwołuje się do wersji 0.7.5)
patric.schenke

31

Kolejnym jest Orika - https://github.com/orika-mapper/orika

Orika to środowisko mapowania Java Bean, które rekurencyjnie kopiuje (między innymi możliwości) dane z jednego obiektu do drugiego. Może to być bardzo przydatne przy tworzeniu aplikacji wielowarstwowych.

Orika koncentruje się na automatyzacji w jak największym stopniu, zapewniając dostosowanie poprzez konfigurację i rozszerzenie w razie potrzeby.

Orika umożliwia programistom:

  • Mapuj złożone i głęboko ustrukturyzowane obiekty
  • Obiekty „Spłaszcz” lub „Rozwiń”, odwzorowując zagnieżdżone właściwości na właściwości najwyższego poziomu i odwrotnie
  • Twórz mapowania w locie i stosuj dostosowania, aby kontrolować niektóre lub wszystkie mapowania
  • Twórz konwertery, aby uzyskać pełną kontrolę nad mapowaniem określonego zestawu obiektów w dowolnym miejscu na wykresie obiektowym - według typu, a nawet według konkretnej nazwy właściwości
  • Obsługa serwerów proxy lub ulepszonych obiektów (takich jak Hibernacja lub różne fałszywe frameworki)
  • Zastosuj mapowanie dwukierunkowe z jedną konfiguracją
  • Odwzoruj na instancje odpowiedniej konkretnej klasy dla docelowej klasy abstrakcyjnej lub interfejsu
  • Obsługa odwrotnych mapowań
  • Obsługa złożonych konwencji wykraczających poza specyfikacje JavaBean.

Orika wykorzystuje generowanie kodu bajtowego do tworzenia szybkich mapowań przy minimalnym nakładzie pracy.


2
możesz podać kilka słów o orice - co odróżnia ją od innych
Olimpiu POP

Jest to prawdopodobnie znacznie szybsze niż Dozer - spycharka pracuje cicho wolno.
Ondrej

21

ModelMapper to kolejna biblioteka, którą warto sprawdzić. Projekt ModelMapper różni się od innych bibliotek tym, że:

  • Automatycznie mapuje modele obiektów, inteligentnie dopasowując właściwości źródła i celu
  • Zapewnia bezpieczny interfejs API do mapowania, który używa rzeczywistego kodu do mapowania pól i metod zamiast ciągów
  • Wykorzystuje konfigurację opartą na konwencjach do łatwej obsługi niestandardowych scenariuszy

Więcej informacji na stronie ModelMapper:

http://modelmapper.org


13

Użyj zwykłych beanutils Apache:

static void copyProperties(Object dest, Object orig) -Kopiuj wartości właściwości od komponentu bean źródłowego do komponentu bean docelowego dla wszystkich przypadków, w których nazwy właściwości są takie same.

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


3
tak, ale właściwości, które znajdują się w źródłowej fasoli, ale nie w fasoli docelowej, są po prostu ignorowane. W każdym razie dzięki Pablojim :) Myślę, że muszę iść z Dozerem, ponieważ mamy kilka nazw nieruchomości różnych dla DO i DTO :(
ravinikam 16.09.2009

1
W porządku - nie wiedziałem o tym ... Lista Pascala była imponująca!
Pablojim


3

Sugeruję wypróbowanie JMapper Framework .

Jest to program do mapowania komponentów Java Bean na Java Bean, pozwala na dynamiczne przesyłanie danych za pomocą adnotacji i / lub XML.

Z JMapper możesz:

  • Twórz i wzbogacaj obiekty docelowe
  • Zastosuj określoną logikę do mapowania
  • Automatycznie zarządzaj plikiem XML
  • Zaimplementuj relacje od 1 do N i od N do 1
  • Wdrażaj wyraźne konwersje
  • Zastosuj odziedziczone konfiguracje

2

Cieszę się, że mogę dodać Moo jako opcję, chociaż wyraźnie jestem do tego nastawiony: http://geoffreywiseman.github.com/Moo/

Jest bardzo łatwy w użyciu dla prostych przypadków, rozsądnie zdolny do bardziej skomplikowanych przypadków, chociaż wciąż są pewne obszary, w których mogę sobie wyobrazić ulepszenie go dla jeszcze bardziej złożonych.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.