alat apa pun untuk objek java ke pemetaan objek? [Tutup]

231

Saya mencoba untuk mengubah DO ke DTO menggunakan java dan mencari alat otomatis sebelum mulai menulis sendiri. Saya hanya ingin tahu apakah ada alat gratis yang tersedia untuk hal yang sama.

ravinikam
sumber
1
Jackson (perpustakaan JSON) memiliki metode new ObjectMapper().convertValue(...). Jackson juga memiliki dukungan untuk anotasi dan anotasi-mixin jadi saya merasa ini pilihan yang sangat bagus.
Simon Forsberg
1
Ini adalah artikel dengan kerangka kerja dan perbandingan kinerja yang berbeda. baeldung.com/java-performance-mapping-frameworks
Christian

Jawaban:

105

Anda bisa mencoba Dozer .

Dozer adalah mapper Java Bean ke Java Bean yang secara rekursif menyalin data dari satu objek ke objek lainnya. Biasanya, Java Beans ini terdiri dari berbagai jenis kompleks.

Dozer mendukung pemetaan properti sederhana, pemetaan tipe kompleks, pemetaan dua arah, pemetaan implisit-eksplisit, serta pemetaan rekursif. Ini termasuk memetakan atribut koleksi yang juga membutuhkan pemetaan di tingkat elemen.

skaffman
sumber
24
Lama sekali, saya datang untuk membuat pembaruan, saya harap komentar saya akan terbaca: Sekarang Dozer tampaknya sudah mati, dan pilihan yang baik adalah menggunakan MapStruct, mudah (mendukung anotasi), cepat (tanpa refleksi ) dan tampaknya aman (saat ini). Ini termasuk dalam daftar Thascent @Pascal, tapi saya menyarankannya (bahkan jika saya punya masalah dengan menggunakannya bersama dengan lombok).
Alex
2
Dozer tampaknya dihidupkan kembali dengan versi 6: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse
394

Ada beberapa perpustakaan di sana:

  • Commons-BeanUtils : ConvertUtils -> Metode utilitas untuk mengubah nilai skalar String ke objek Kelas yang ditentukan, String array ke array dari Kelas yang ditentukan.

  • Commons-Lang : ArrayUtils -> Operasi pada array, array primitif (seperti int []) dan array pembungkus primitif (seperti Integer []).

  • Kerangka pegas : Pegas memiliki dukungan yang sangat baik untuk PropertyEditors, yang juga dapat digunakan untuk mengubah Objek ke / dari Strings.

  • Dozer : Dozer adalah mapper Java Bean to Java Bean yang kuat namun sederhana yang secara rekursif menyalin data dari satu objek ke objek lainnya. Biasanya, Java Beans ini terdiri dari berbagai jenis kompleks.

  • ModelMapper : ModelMapper adalah kerangka pemetaan objek cerdas yang secara otomatis memetakan objek satu sama lain. Ia menggunakan pendekatan berbasis konvensi untuk memetakan objek sambil menyediakan API aman refactoring sederhana untuk menangani kasus penggunaan tertentu.

  • MapStruct : MapStruct adalah generator kode kompilasi-waktu untuk pemetaan kacang, menghasilkan cepat (tidak ada penggunaan refleksi atau serupa), kode pemetaan dependensi-kurang dan jenis-aman saat runtime.

  • Orika : Orika menggunakan pembuatan kode byte untuk membuat pemetaan cepat dengan overhead yang minimal.

  • Selma : Kompilasi kode-generator waktu untuk pemetaan

  • JMapper : Pembuatan bean mapper menggunakan Annotation, XML atau API (tampaknya mati, terakhir diperbarui 2 tahun yang lalu)

  • Smooks : The Smooks JavaBean Cartridge memungkinkan Anda untuk membuat dan mengisi objek Java dari data pesan Anda (yaitu, ikat data ke) (disarankan oleh superfilin dalam komentar). (Tidak lagi dalam pengembangan aktif)

  • Commons-Convert : Commons-Convert bertujuan untuk menyediakan pustaka tunggal yang didedikasikan untuk tugas mengkonversi objek dari satu jenis ke yang lain. Tahap pertama akan fokus pada konversi Object to String dan String to Object. (tampaknya mati, pembaruan terakhir 2010)

  • Transmorph : Transmorph adalah pustaka java gratis yang digunakan untuk mengubah objek Java dari satu tipe menjadi objek dari tipe lain (dengan tanda tangan lain, mungkin parameter). (tampaknya mati, pembaruan terakhir 2013)

  • EZMorph : EZMorph adalah pustaka java sederhana untuk mengubah Objek ke Objek lain. Ini mendukung transformasi untuk primitif dan Objek, untuk array multidimensi dan transformasi dengan DynaBeans (tampaknya sudah mati, terakhir diperbarui 2008)

  • Morph : Morph adalah kerangka kerja Java yang memudahkan interoperabilitas internal suatu aplikasi. Ketika informasi mengalir melalui aplikasi, ia mengalami banyak transformasi. Morph menyediakan cara standar untuk mengimplementasikan transformasi ini. (tampaknya mati, pembaruan terakhir 2008)

  • Lorentz : Lorentz adalah kerangka kerja konversi objek-ke-objek umum. Ini menyediakan API sederhana untuk mengkonversi objek Java dari satu jenis menjadi objek dari jenis lain. (sepertinya mati)

  • OTOM : Dengan OTOM, Anda dapat menyalin data apa pun dari objek apa pun ke objek lain. Kemungkinannya tidak terbatas. Selamat datang di "Musim Gugur". (sepertinya mati)

Thivent Pascal
sumber
tidak ada daftar yang mendukung anotasi :(
ravinikam
1
Commons-Convert tampaknya bukan hanya tidak aktif tetapi benar-benar hilang sekarang ...
Jim Ferrans
Sebenarnya, jika Anda ingin menambahkan Moo ke daftar Anda, maka saya dapat menghapus jawaban saya, karena jawaban Anda jelas jauh lebih lengkap. ;)
Geoffrey Wiseman
3
Opsi lain untuk Java 8+: erchu.github.io/bean-cp (penafian: Saya penulis proyek ini)
Rafal
1
@TmTron: Selesai dan saya mengedit jawaban untuk menghapus teguran dan merujuk URL repo (karena halaman utama masih merujuk pada 0.7.5)
patric.schenke
31

Satu lagi adalah Orika - https://github.com/orika-mapper/orika

Orika adalah kerangka pemetaan Java Bean yang secara rekursif menyalin (di antara kemampuan lain) data dari satu objek ke objek lainnya. Ini bisa sangat berguna ketika mengembangkan aplikasi berlapis-lapis.

Orika berfokus pada mengotomatisasi sebanyak mungkin, sambil memberikan penyesuaian melalui konfigurasi dan ekstensi jika diperlukan.

Orika memungkinkan pengembang untuk:

  • Peta objek yang kompleks dan sangat terstruktur
  • "Ratakan" atau "Bentangkan" objek dengan memetakan properti bersarang ke properti tingkat atas, dan sebaliknya
  • Buat pemetaan saat dalam perjalanan, dan terapkan penyesuaian untuk mengontrol sebagian atau semua pemetaan
  • Buat konverter untuk kontrol penuh atas pemetaan set objek tertentu di mana saja dalam grafik objek - berdasarkan jenis, atau bahkan dengan nama properti tertentu
  • Menangani proksi atau objek yang ditingkatkan (seperti yang dimiliki Hibernate, atau berbagai kerangka kerja tiruan)
  • Terapkan pemetaan dua arah dengan satu konfigurasi
  • Peta ke instance kelas konkret yang sesuai untuk kelas atau antarmuka abstrak target
  • Tangani pemetaan terbalik
  • Menangani konvensi kompleks di luar spesifikasi JavaBean.

Orika menggunakan pembuatan kode byte untuk membuat pemetaan cepat dengan overhead yang minimal.

Tomas
sumber
2
Anda bisa memberikan beberapa kata tentang orika - apa yang membuatnya berbeda dari yang lain
Olimpiu POP
Ini mungkin jauh lebih cepat daripada Dozer - dozer tenang lambat.
Ondrej Bozek
21

ModelMapper adalah perpustakaan lain yang patut dilihat. Desain ModelMapper berbeda dari perpustakaan lain dalam hal itu:

  • Secara otomatis memetakan model objek dengan mencocokkan properti sumber dan tujuan secara cerdas
  • Menyediakan API pemetaan aman refactoring yang menggunakan kode aktual untuk memetakan bidang dan metode daripada menggunakan string
  • Menggunakan konfigurasi berdasarkan konvensi untuk penanganan sederhana skenario khusus

Lihatlah situs ModelMapper untuk info lebih lanjut:

http://modelmapper.org

Jonathan
sumber
13

Gunakan Apache commons beanutils:

static void copyProperties(Object dest, Object orig) -Salin nilai properti dari kacang asal ke kacang tujuan untuk semua kasus di mana nama properti sama.

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

Pablojim
sumber
3
ya, tetapi properti yang ada di kacang sumber, tetapi tidak di kacang tujuan hanya diabaikan. Terima kasih lagian Pablojim :) Saya pikir saya harus pergi dengan Dozer karena kami memiliki beberapa nama properti yang berbeda untuk DO dan DTO :(
ravinikam
1
Cukup adil - saya tidak tahu ini ... Daftar Pascal cukup mengesankan!
Pablojim
3

Saya sarankan Anda mencoba JMapper Framework .

Ini adalah Java bean to Java bean mapper, memungkinkan Anda untuk melakukan petikan data secara dinamis dengan anotasi dan / atau XML.

Dengan JMapper Anda dapat:

  • Buat dan perkaya objek target
  • Terapkan logika tertentu ke pemetaan
  • Secara otomatis mengelola file XML
  • Terapkan hubungan 1 ke N dan N ke 1
  • Terapkan konversi eksplisit
  • Terapkan konfigurasi bawaan
Alessandro
sumber
2

Saya senang menambahkan Moo sebagai opsi, meskipun jelas saya bias terhadapnya: http://geoffreywiseman.github.com/Moo/

Ini sangat mudah digunakan untuk kasus-kasus sederhana, cukup masuk akal untuk kasus-kasus yang lebih kompleks, walaupun masih ada beberapa area di mana saya bisa membayangkan memperbaikinya untuk kompleksitas yang lebih jauh.

Geoffrey Wiseman
sumber
2

Anda juga dapat mencoba kerangka pemetaan berdasarkan Dozer, tetapi dengan deklarasi pemetaan Excel. Mereka punya beberapa alat dan fitur keren tambahan. Periksa di http://openl-tablets.sf.net/mapper

Ivan
sumber