ModelMapper Java: ऑटोमैटिक ऑब्जेक्ट मैपिंग की पूरी गाइड
1. ModelMapper क्या है और इसकी ज़रूरत क्यों है?
ModelMapper एक शक्तिशाली Java लाइब्रेरी है, जो एक प्रकार के ऑब्जेक्ट को दूसरे प्रकार के ऑब्जेक्ट में स्वचालित रूप से बदलने (मैपिंग) के लिए डिज़ाइन की गई है। आधुनिक डेवलपमेंट में, खासकर मल्टी-लेयर आर्किटेक्चर (Controller → Service → Repository) का उपयोग करते समय, डेवलपर्स को DTO (Data Transfer Objects), Entity (डेटाबेस एंटिटी), VO (Value Objects) और अन्य POJO के बीच डेटा कॉपी करने की आवश्यकता होती है। मैन्युअल रूप से ऐसा कोड लिखना थकाऊ और त्रुटि-प्रवण काम है, जिससे कोड फूल जाता है और पढ़ने में मुश्किल होती है।
ModelMapper का मुख्य उद्देश्य डेवलपर को source.getField() → target.setField() जैसे बॉयलरप्लेट कोड लिखने से बचाना है। लाइब्रेरी क्लासेस की संरचना (फ़ील्ड, गेटर/सेटर) का विश्लेषण करती है और नेमिंग कन्वेंशन (convention over configuration) का उपयोग करके उन्हें स्वचालित रूप से मैप करती है। यह नेस्टेड ऑब्जेक्ट, कलेक्शन, इनहेरिटेंस और जटिल ट्रांसफॉर्मेशन को सपोर्ट करती है, जो इसे एंटरप्राइज़ Java एप्लिकेशन में एक अनिवार्य टूल बनाती है।
ModelMapper निम्नलिखित परिदृश्यों में विशेष रूप से उपयोगी है:
- एप्लिकेशन लेयर: REST API के माध्यम से डेटा ट्रांसफर के लिए Entity को DTO में और वापस बदलना।
- माइक्रोसर्विसेज: विभिन्न सर्विसेज के ऑब्जेक्ट के बीच मैपिंग।
- रीफैक्टरिंग: जब क्लास की संरचना बदलती है, तो केवल एक जगह मैपिंग बदलनी होती है।
- टेस्टिंग: मौजूदा ऑब्जेक्ट के आधार पर तेज़ी से टेस्ट डेटा बनाना।
2. इंस्टॉलेशन
ModelMapper Maven Central के माध्यम से वितरित किया जाता है। इसे इंस्टॉल करने के लिए, pom.xml (Maven के लिए) या build.gradle (Gradle के लिए) फ़ाइल में डिपेंडेंसी जोड़नी होगी।
Maven (pom.xml):
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.0</version>
</dependency>
Gradle (build.gradle):
implementation 'org.modelmapper:modelmapper:3.2.0'
नोट: यह लेख लिखने के समय वर्शन 3.2.0 नवीनतम है। नवीनतम वर्शन के लिए MVNRepository देखें।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
एक सरल उदाहरण देखें: हमारे पास UserEntity (डेटाबेस एंटिटी) और UserDTO (डेटा ट्रांसफर ऑब्जेक्ट) क्लास है।
// स्रोत क्लास (Entity)
public class UserEntity {
private Long id;
private String firstName;
private String lastName;
private String email;
// कंस्ट्रक्टर, गेटर और सेटर
public UserEntity() {}
public UserEntity(Long id, String firstName, String lastName, String email) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
// लक्ष्य क्लास (DTO)
public class UserDTO {
private Long id;
private String fullName; // ध्यान दें: फ़ील्ड का नाम अलग है
private String emailAddress;
// कंस्ट्रक्टर, गेटर और सेटर
public UserDTO() {}
public Long getId() { return id; }
public void