जावा ऑब्जेक्ट मैपिंग के लिए कोई उपकरण? [बन्द है]


231

मैं java का उपयोग करके DO को DTO में बदलने की कोशिश कर रहा हूं और अपना स्वयं का लेखन शुरू करने से पहले स्वचालित टूल की तलाश कर रहा हूं। मैं बस यह जानना चाहता था कि क्या कोई मुफ्त टूल उपलब्ध है या नहीं।


1
जैक्सन (JSON लाइब्रेरी) में एक विधि है new ObjectMapper().convertValue(...)। जैक्सन को एनोटेशन और एनोटेशन-मिक्सिन्स के लिए भी समर्थन है इसलिए मुझे यह एक बहुत अच्छा विकल्प लगता है।
साइमन फोर्सबर्ग

1
यहाँ विभिन्न चौखटे और प्रदर्शन तुलना के साथ एक लेख है। baeldung.com/java-performance-mapping-frameworks
क्रिश्चियन

जवाबों:


105

आप डोजर की कोशिश कर सकते हैं ।

डॉजर एक जावा बीन से जावा बीन मैपर है जो डेटा को एक वस्तु से दूसरी वस्तु में पुन: कॉपी करता है। आमतौर पर, ये जावा बीन्स विभिन्न प्रकार के होंगे।

डोजर सरल संपत्ति मानचित्रण, जटिल प्रकार के मानचित्रण, द्वि-दिशात्मक मानचित्रण, अंतर्निहित-स्पष्ट मानचित्रण, साथ ही पुनरावर्ती मानचित्रण का समर्थन करता है। इसमें मानचित्रण संग्रह विशेषताएँ शामिल हैं जिन्हें तत्व स्तर पर मानचित्रण की भी आवश्यकता होती है।


24
एक बहुत लंबे समय के बाद, मैं एक अपडेट करने के लिए आता हूं, मुझे आशा है कि मेरी टिप्पणी पढ़ी जाएगी: अब डोजर एक मृत प्रतीत होता है, और एक अच्छा विकल्प मैपस्ट्रक्ट का उपयोग करना है, यह आसान है (समर्थन एनोटेशन), तेज (कोई प्रतिबिंब नहीं) ) और सुरक्षित लगता है (फिलहाल)। यह @Pascal Thivent सूची में शामिल है, हालांकि, लेकिन मैं इसे सलाह देता हूं (भले ही मुझे लम्बोक के साथ इसका उपयोग करके कुछ समस्याएं थीं)।
एलेक्स

2
डोजर संस्करण 6 के साथ पुनर्जीवित लगता है: mvnrepository.com/artifact/com.github.dozermapper/dozer-core
tkruse

394

वहाँ कुछ पुस्तकालय हैं:

  • कॉमन्स- बीन्यूटिल्स: कन्वर्टयूटिल्स -> स्ट्रिंग स्केलर मानों को निर्दिष्ट वर्ग की वस्तुओं में परिवर्तित करने के लिए उपयोगिता विधियां, निर्दिष्ट वर्ग के सरणियों के लिए स्ट्रिंग सरणियां।

  • कॉमन्स-लैंग : ArrayUtils -> सरणियों पर संचालन, आदिम सरणियाँ (जैसे int []) और आदिम आवरण आवरण (जैसे Integer [])।

  • स्प्रिंग फ्रेमवर्क : स्प्रिंग को प्रॉपर्टीएडिटर के लिए एक उत्कृष्ट समर्थन है, जिसका उपयोग ऑब्जेक्ट्स को स्ट्रिंग्स से / में बदलने के लिए भी किया जा सकता है।

  • डोजर : डोजर एक शक्तिशाली, अभी तक सरल जावा बीन से जावा बीन मैपर है जो डेटा को एक वस्तु से दूसरी वस्तु में पुन: कॉपी करता है। आमतौर पर, ये जावा बीन्स विभिन्न प्रकार के होंगे।

  • ModelMapper : ModelMapper एक बुद्धिमान वस्तु मैपिंग फ्रेमवर्क है जो स्वचालित रूप से वस्तुओं को एक दूसरे से मैप करता है। यह विशिष्ट उपयोग के मामलों को संभालने के लिए एक सरल रीफैक्टरिंग सुरक्षित एपीआई प्रदान करते हुए मैप ऑब्जेक्ट्स के लिए एक कन्वेंशन आधारित दृष्टिकोण का उपयोग करता है।

  • MapStruct : MapStruct बीन मैपिंग के लिए एक संकलन-समय कोड जनरेटर है, जिसके परिणामस्वरूप तेजी (प्रतिबिंब या समान का कोई उपयोग नहीं), निर्भरता कम और टाइप-सेफ मैपिंग कोड रनटाइम पर।

  • ओरिका : ओरिका न्यूनतम ओवरहेड के साथ तेजी से मैपर बनाने के लिए बाइट कोड पीढ़ी का उपयोग करता है।

  • सेल्मा : मैपिंग के लिए संकलन-समय कोड-जनरेटर

  • जेपर : बीन मैपर जेनरेशन एनोटेशन, एक्सएमएल या एपीआई (मृत प्रतीत होता है, अंतिम अद्यतन 2 साल पहले का उपयोग करके)

  • स्मूक्स : स्मूक्स जावाबीन कार्ट्रिज आपको अपने संदेश डेटा (यानी बाइंड डेटा) से जावा वस्तुओं को बनाने और आबाद करने की अनुमति देता है ( टिप्पणियों में सुपरफिलिन द्वारा सुझाया गया है)। (अब सक्रिय विकास के तहत नहीं)

  • कॉमन्स-कन्वर्ट : कॉमन्स-कन्वर्ट का उद्देश्य एक प्रकार के ऑब्जेक्ट को एक प्रकार से दूसरे में परिवर्तित करने के लिए समर्पित एक लाइब्रेरी प्रदान करना है। पहला चरण ऑब्जेक्ट टू स्ट्रिंग और स्ट्रिंग टू ऑब्जेक्ट रूपांतरण होगा। (लगता है मृत, अंतिम अपडेट 2010)

  • Transmorph : Transmorph एक मुक्त जावा लाइब्रेरी है जिसका उपयोग एक प्रकार की जावा वस्तु को दूसरे प्रकार की वस्तु में बदलने के लिए किया जाता है (दूसरे हस्ताक्षर के साथ, संभवतः पैरामीटर किया जाता है)। (लगता है मृत, आखिरी अपडेट 2013)

  • EZMorph : EZMorph एक ऑब्जेक्ट को दूसरी ऑब्जेक्ट में बदलने के लिए सरल जावा लाइब्रेरी है। यह आदिम और वस्तुओं के लिए परिवर्तन का समर्थन करता है, डायनेमिक्स के साथ बहुआयामी सरणियों और परिवर्तनों के लिए (लगता है कि मृत, अंतिम अद्यतन)

  • मोर्फ : मोर्फ एक जावा ढांचा है जो किसी एप्लिकेशन की आंतरिक अंतर-क्षमता को आसान बनाता है। जैसे-जैसे सूचना एक आवेदन के माध्यम से बहती है, यह कई परिवर्तनों से गुजरती है। मॉर्फ इन परिवर्तनों को लागू करने के लिए एक मानक तरीका प्रदान करता है। (लगता है मर चुका है, आखिरी अपडेट 2008)

  • लोरेंत्ज़ : लोरेंट्ज़ एक सामान्य वस्तु-से-ऑब्जेक्ट रूपांतरण ढांचा है। यह एक प्रकार की जावा वस्तुओं को दूसरे प्रकार की वस्तु में बदलने के लिए एक सरल एपीआई प्रदान करता है। (मृत लगता है)

  • OTOM : OTOM के साथ, आप किसी भी ऑब्जेक्ट को किसी भी ऑब्जेक्ट से किसी अन्य ऑब्जेक्ट में कॉपी कर सकते हैं। संभावनाएं अनंत हैं। "शरद ऋतु" में आपका स्वागत है। (मृत लगता है)


सूची में से कोई भी एनोटेशन का समर्थन नहीं करता है :(
ravinikam

1
कॉमन्स-कन्वर्ट न केवल सुप्त लगता है, बल्कि पूरी तरह से अब चला गया है ...
जिम फेर्र्स

वास्तव में, यदि आप अपनी सूची में मू जोड़ना चाहते हैं, तो मैं अपना उत्तर हटा सकता हूं, क्योंकि आपका उत्तर स्पष्ट रूप से अधिक पूर्ण है। ;)
ज्योफ्री विस्मैन

3
जावा 8+ के लिए एक अन्य विकल्प: erchu.github.io/bean-cp (अस्वीकरण: मैं इस परियोजना का लेखक हूं)
राफाल

1
@TmTron: किया गया और मैंने स्ट्राइक को हटाने और रेपो URL को संदर्भित करने के लिए उत्तर संपादित किया (चूंकि मुख्य पृष्ठ अभी भी
0.7.5

31

एक और है ओरिका - https://github.com/orika-mapper/orika

ओरिका एक जावा बीन मैपिंग ढांचा है जो एक वस्तु से दूसरी वस्तु में डेटा (अन्य क्षमताओं के बीच) की प्रतिलिपि बनाता है। बहुस्तरीय अनुप्रयोगों को विकसित करते समय यह बहुत उपयोगी हो सकता है।

जहां जरूरत हो, विन्यास और विस्तार के माध्यम से अनुकूलन प्रदान करते हुए, ओरीका जितना संभव हो उतना स्वचालित करने पर ध्यान केंद्रित करता है।

Orika डेवलपर को सक्षम करता है:

  • नक्शा जटिल और गहराई से संरचित वस्तुओं
  • "समतल" या "विस्तारित" ऑब्जेक्ट्स को नेस्टेड गुणों को शीर्ष-स्तरीय संपत्तियों के मानचित्रण द्वारा और इसके विपरीत
  • मैपिंग-ऑन-द-फ्लाई बनाएं, और कुछ या सभी मैपिंग को नियंत्रित करने के लिए अनुकूलन लागू करें
  • ऑब्जेक्ट ग्राफ में कहीं भी वस्तुओं के एक विशिष्ट सेट की मैपिंग पर पूर्ण नियंत्रण के लिए कन्वर्टर्स बनाएं - प्रकार द्वारा, या यहां तक ​​कि विशिष्ट संपत्ति नाम से भी
  • समीपवर्ती या बढ़ी हुई वस्तुओं को संभालें (जैसे कि हाइबरनेट, या विभिन्न नकली रूपरेखा)
  • द्वि-दिशात्मक मानचित्रण को एक कॉन्फ़िगरेशन के साथ लागू करें
  • लक्ष्य सार वर्ग या इंटरफ़ेस के लिए एक उपयुक्त ठोस वर्ग के उदाहरणों के लिए मानचित्र
  • रिवर्स मैपिंग संभालें
  • JavaBean स्पेक्स से परे जटिल सम्मेलनों को संभालें।

ओरिका न्यूनतम ओवरहेड के साथ तेजी से मैपर बनाने के लिए बाइट कोड पीढ़ी का उपयोग करता है।


2
आप ओरीका के बारे में कुछ शब्द प्रदान कर सकते हैं - जो इसे दूसरों से अलग बनाता है
ओलम्पिउ पीओपी

यह शायद डोजर की तुलना में बहुत तेज है - डोजर धीमा धीमा है।
Ondrej Bozek

21

ModelMapper एक और लाइब्रेरी है जो चेक आउट करने लायक है। ModelMapper का डिज़ाइन अन्य पुस्तकालयों से अलग है जिसमें यह है:

  • स्वचालित रूप से ऑब्जेक्ट मॉडल को बुद्धिमानी से स्रोत और गंतव्य गुणों से मिलान करके मैप करता है
  • स्ट्रिंग को उपयोग करने के बजाय फ़ील्ड और विधियों को मैप करने के लिए वास्तविक कोड का उपयोग करने वाला एक रीफ़ैक्टरिंग सुरक्षित मैपिंग API प्रदान करता है
  • कस्टम परिदृश्यों की सरल हैंडलिंग के लिए सम्मेलन आधारित विन्यास का उपयोग करता है

अधिक जानकारी के लिए ModelMapper साइट देखें:

http://modelmapper.org


13

अपाचे कॉमन्स सेम का उपयोग करें:

static void copyProperties(Object dest, Object orig) -प्रॉपर्टी के नाम मूल बीन से गंतव्य बीन तक सभी मामलों के लिए जहां संपत्ति के नाम समान हैं।

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


3
येह, लेकिन गुण जो स्रोत बीन में होते हैं, लेकिन गंतव्य बीन में नहीं होते हैं उन्हें केवल अनदेखा किया जाता है। वैसे भी धन्यवाद Pablojim :) मुझे लगता है कि मुझे Dozer के साथ जाना है क्योंकि हमारे पास DO और DTO के लिए कुछ संपत्ति के नाम अलग हैं :(
ravinikam

1
काफी साफ - मुझे यह नहीं पता था ... पास्कल की सूची बहुत प्रभावशाली थी!
पाब्लोइजिम


3

मेरा सुझाव है कि आप JMapper फ्रेमवर्क का प्रयास करें ।

यह जावा बीन मैपर के लिए एक जावा बीन है, आप एनोटेशन और / या एक्सएमएल के साथ गतिशील रूप से डेटा के पारित होने की अनुमति देता है।

JMapper के साथ आप कर सकते हैं:

  • लक्ष्य ऑब्जेक्ट बनाएं और समृद्ध करें
  • मैपिंग के लिए एक विशिष्ट तर्क लागू करें
  • XML फ़ाइल को स्वचालित रूप से प्रबंधित करें
  • 1 से N और N से 1 संबंधों को लागू करें
  • स्पष्ट रूपांतरणों को लागू करें
  • विरासत में मिले कॉन्फ़िगरेशन को लागू करें

2

मुझे मू को एक विकल्प के रूप में जोड़ने में खुशी हो रही है, हालांकि स्पष्ट रूप से मैं इसके प्रति पक्षपाती हूं: http://geoffreywiseman.github.Mn/

सरल मामलों के लिए उपयोग करना बहुत आसान है, अधिक जटिल मामलों के लिए उचित सक्षम है, हालांकि अभी भी कुछ ऐसे क्षेत्र हैं जहां मैं इसे और अधिक जटिलताओं के लिए बढ़ाने की कल्पना कर सकता हूं।


2

आप डोजर के आधार पर मैपिंग ढांचे की भी कोशिश कर सकते हैं, लेकिन एक्सेल मैपिंग घोषणा के साथ। उन्हें कुछ उपकरण और अतिरिक्त शांत सुविधाएँ मिली हैं। Http://openl-tablets.sf.net/mapper पर देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.