nesne nesne eşleme için herhangi bir araç? [kapalı]


231

Java kullanarak DTO dönüştürmek için çalışıyorum ve kendi yazmaya başlamadan önce otomatik bir araç arıyorum. Ben sadece aynı için kullanılabilir herhangi bir ücretsiz araç olup olmadığını bilmek istedim.


1
Jackson'ın (JSON kütüphanesi) bir yöntemi vardır new ObjectMapper().convertValue(...). Jackson'ın ayrıca ek açıklamalar ve ek açıklama karışımları için desteği var, bu yüzden çok iyi bir seçenek buluyorum.
Simon Forsberg

1
Farklı çerçevelere ve performans karşılaştırmasına sahip bir makale. baeldung.com/java-performance-mapping-frameworks
Christian

Yanıtlar:


105

Dozer'i deneyebilirsin .

Dozer, verileri bir nesneden diğerine özyinelemeli olarak kopyalayan bir Java Bean - Java Bean eşleştiricisidir. Genellikle, bu Java Fasulyeleri farklı karmaşık tiplerde olacaktır.

Dozer, basit özellik eşleme, karmaşık tip eşleme, çift yönlü eşleme, örtük-açık eşleme ve özyinelemeli eşlemeyi destekler. Buna öğe düzeyinde eşleme gerektiren eşleme toplama öznitelikleri de dahildir.


24
Çok uzun bir süre sonra, bir güncelleme yapmaya geldim, umarım yorumum okunacak: Şimdi Dozer ölü gibi görünüyor ve iyi bir seçenek MapStruct'ı kullanmak, kolay (ek açıklamaları destekliyor), hızlı (yansıma yok) ) ve güvenli görünüyor (şu anda). Bu @Pascal Thivent listesinde olmasına rağmen, ama bunu tavsiye ederim (lombok ile birlikte kullanarak bazı problemlerim olsa bile).
Alex

2
Dozer sürüm 6 ile yeniden canlanıyor gibi görünüyor: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

Orada bazı kütüphaneler var:

  • Commons-BeanUtils : ConvertUtils -> Dize skaler değerlerini belirtilen Sınıfın nesnelerine, Dize dizilerini belirtilen Sınıfın dizilerine dönüştürmek için yardımcı yöntemler.

  • Commons-Lang : ArrayUtils -> Diziler, ilkel diziler (int [] gibi) ve ilkel sarma dizileri (Integer [] gibi) işlemleri.

  • Yay çerçevesi : Yay, Nesneleri Dizelere / Dizelerden dönüştürmek için de kullanılabilen PropertyEditors için mükemmel bir desteğe sahiptir.

  • Dozer : Dozer, verileri bir nesneden diğerine özyinelemeli olarak kopyalayan güçlü, ancak basit bir Java Bean'den Java Bean eşleştiricisidir. Tipik olarak, bu Java Fasulyeleri farklı karmaşık tiplerde olacaktır.

  • ModelMapper : ModelMapper, nesneleri otomatik olarak birbirleriyle eşleştiren akıllı bir nesne eşleme çerçevesidir. Belirli kullanım durumlarını ele almak için basit bir yeniden düzenleme güvenli API sağlarken, nesneleri eşleştirmek için kural tabanlı bir yaklaşım kullanır.

  • MapStruct : MapStruct, fasulye eşlemeleri için derleme zamanı kod üretecidir ve çalışma zamanında hızlı (yansıma veya benzeri kullanılmaz), bağımlılık gerektirmeyen ve tür güvenli haritalama kodu ile sonuçlanır.

  • Orika : Orika, minimum ek yüke sahip hızlı eşleyiciler oluşturmak için bayt kodu oluşturma özelliğini kullanır.

  • Selma : Eşlemeler için derleme zamanı kod üreticisi

  • JMapper : Ek Açıklama, XML veya API kullanarak fasulye eşleyici oluşturma (ölü görünüyor, en son 2 yıl önce güncellendi)

  • Smooks : Smooks JavaBean Kartuşu, mesaj verilerinizden Java nesnelerini oluşturmanıza ve doldurmanıza olanak sağlar (yani verileri buraya bağla) ( yorumlarda süperfilin tarafından önerilir ).(Artık aktif geliştirme aşamasında değil)

  • Commons-Convert : Commons-Convert, bir türdeki bir nesneyi diğerine dönüştürme görevine adanmış tek bir kütüphane sağlamayı amaçlamaktadır. İlk aşama Nesneden Dizeye ve Dizeden Nesneye dönüşümlere odaklanacaktır. (ölü gibi görünüyor, son güncelleme 2010)

  • Transmorph : Transmorph, bir türdeki bir Java nesnesini başka bir türün nesnesine dönüştürmek için kullanılan ücretsiz bir java kütüphanesidir (başka bir imzayla, muhtemelen parametrelenmiş). (ölü gibi görünüyor, son güncelleme 2013)

  • EZMorph : EZMorph bir Object'i başka bir Object'e dönüştürmek için kullanılan basit bir java kütüphanesidir. İlkel ve Nesneler, çok boyutlu diziler ve DynaBeans ile dönüşümleri destekler (ölü gibi görünür, son güncelleme tarihi 2008)

  • Morph : Morph, bir uygulamanın dahili birlikte çalışabilirliğini kolaylaştıran bir Java çerçevesidir. Bilgi bir uygulamadan geçerken, çoklu dönüşümlere uğrar. Morph bu dönüşümleri uygulamak için standart bir yol sağlar. (ölü gibi görünüyor, son güncelleme 2008)

  • Lorentz : Lorentz genel bir nesneden nesneye dönüşüm çerçevesidir. Bir türdeki Java nesnelerini başka türdeki bir nesneye dönüştürmek için basit bir API sağlar. (ölü gibi görünüyor)

  • OTOM : OTOM ile, herhangi bir nesnedeki herhangi bir veriyi başka bir nesneye kopyalayabilirsiniz. İmkanlar sonsuzdur. "Sonbahar" a hoş geldiniz. (ölü gibi görünüyor)


listelerin hiçbiri ek açıklamaları desteklemez :(
ravinikam

1
Commons-Convert sadece uykuda değil aynı zamanda tamamen gitti ...
Jim Ferrans

Aslında, listene Moo eklemek istiyorsanız, cevabımı kaldırabilirim, çünkü cevabınız çok daha eksiksiz. ;)
Geoffrey Wiseman

3
Java 8+ için başka bir seçenek: erchu.github.io/bean-cp (feragat: Bu projenin yazarıyım )
Rafal

1
@TmTron: Grevi kaldırmak ve repo URL'sini referanslamak için yanıt verildi ve ana sayfa hala 0.7.5 olduğundan beri
patric.schenke

31

Bir diğeri Orika - https://github.com/orika-mapper/orika

Orika, verileri bir nesneden diğerine özyinelemeli olarak kopyalayan bir Java Bean eşleme çerçevesidir. Çok katmanlı uygulamalar geliştirirken çok yararlı olabilir.

Orika, mümkün olduğunca otomatikleştirmeye odaklanırken, gerektiğinde yapılandırma ve genişletme yoluyla özelleştirme sağlar.

Orika geliştiricinin şunları yapmasını sağlar:

  • Karmaşık ve derin yapılandırılmış nesneleri eşleme
  • İç içe özellikleri üst düzey özelliklere eşleştirerek nesneleri "Düzleştir" veya "Genişlet" veya tersini yapın
  • Anında harita oluşturucular oluşturun ve eşlemenin bir kısmını veya tamamını kontrol etmek için özelleştirmeler uygulayın
  • Nesne grafiğinde herhangi bir yerde belirli bir nesne kümesinin eşlenmesi üzerinde tam kontrol için dönüştürücüler oluşturun - türe veya hatta belirli özellik adına göre
  • Proxy'leri veya gelişmiş nesneleri (Hazırda Beklet veya farklı sahte çerçeveler gibi) yönetme
  • Tek bir yapılandırma ile çift yönlü eşleme uygulama
  • Hedef soyut sınıf veya arabirim için uygun bir somut sınıfın örnekleriyle eşleme
  • Ters eşlemeleri işleme
  • JavaBean özelliklerinin ötesinde karmaşık kurallara uyun.

Orika, minimum ek yüke sahip hızlı eşleyiciler oluşturmak için bayt kodu oluşturma özelliğini kullanır.


2
orika hakkında birkaç kelime verebilirsin - diğerlerinden farklı kılan şey
Olimpiu POP

Muhtemelen Dozer'den çok daha hızlı - dozer sessiz yavaş.
Ondrej Bozek

21

ModelMapper , görülmeye değer başka bir kütüphanedir. ModelMapper'ın tasarımı diğer kütüphanelerden farklıdır, çünkü:

  • Kaynak ve hedef özellikleri akıllıca eşleştirerek nesne modellerini otomatik olarak eşler
  • Dizeleri kullanmak yerine alanları ve yöntemleri eşlemek için gerçek kodu kullanan yeniden düzenleme güvenli bir eşleme API'sı sağlar
  • Özel senaryoların kolay işlenmesi için kural tabanlı yapılandırmayı kullanır

Daha fazla bilgi için ModelMapper sitesini ziyaret edin:

http://modelmapper.org


13

Apache commons beanutils kullanın:

static void copyProperties(Object dest, Object orig) Özellik adlarının aynı olduğu tüm durumlar için, başlangıç ​​fasulye ile hedef fasulye arasındaki özellik değerlerini kopyalayın.

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


3
yeh, ancak kaynak çekirdeğinde bulunan, ancak hedef çekirdeğinde bulunmayan özellikler göz ardı edilir. Neyse teşekkürler Pablojim :) Ben DOzer ve DTO için farklı bazı mülkiyet isimleri var çünkü Dozer ile gitmek zorunda düşünüyorum :(
ravinikam 16:30

1
Yeterince adil - bunu bilmiyordum ... Pascal'ın listesi oldukça etkileyiciydi!
Pablojim


3

JMapper Framework'ü denemenizi öneririm .

Bir Java fasulyesi ile Java fasulyesi eşleştiricisidir, ek açıklamalar ve / veya XML ile verilerin dinamik olarak geçişini sağlar.

JMapper ile şunları yapabilirsiniz:

  • Hedef nesneler oluşturma ve zenginleştirme
  • Eşlemeye belirli bir mantık uygulama
  • XML dosyasını otomatik olarak yönet
  • 1'den N'ye ve N'den 1'e ilişkilerini uygulayın
  • Açık dönüşümler uygulayın
  • Devralınan yapılandırmaları uygulama

2

Moo'yu bir seçenek olarak eklemekten mutluluk duyuyorum, ancak açıkça buna karşı önyargılıyım: http://geoffreywiseman.github.com/Moo/

Basit durumlar için kullanımı çok kolay, daha karmaşık vakalar için makul, ancak daha da karmaşıklıklar için geliştirmeyi hayal edebileceğim bazı alanlar olmasına rağmen.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.