MapStruct হল একটি Java annotation processor যা ডোমেইন অবজেক্টগুলির মধ্যে ম্যাপিং করার জন্য ব্যবহৃত হয়। এটি compile-time কোড জেনারেট করে, যা পারফরম্যান্স উন্নত করে এবং সাধারণ ম্যাপিং কাজগুলো দ্রুত সম্পন্ন করতে সহায়তা করে। Mapping Inheritance (Subclass Mapping) হল একটি এমন প্রক্রিয়া যেখানে মেভেনের ম্যাপিং ক্লাস সাবক্লাস (inheritance) ব্যবহার করে প্যারেন্ট ক্লাস থেকে ডেটা ম্যাপিং করা হয়।
MapStruct এ Inheritance Mapping ব্যবহৃত হয় যখন আপনি একটি প্যারেন্ট ক্লাসের ডেটা সাবক্লাসে ম্যাপ করতে চান, অথবা প্যারেন্ট ক্লাসের কিছু ফিল্ড সাবক্লাসে ম্যাপ করতে চান।
এটি মূলত Polymorphic Mapping নামে পরিচিত যেখানে প্যারেন্ট ক্লাস থেকে সাবক্লাসে ডেটা ট্রান্সফার হয়। MapStruct প্যারেন্ট এবং সাবক্লাসের জন্য আলাদা ম্যাপিং মেথড জেনারেট করতে পারে।
Inheritance Mapping এ প্যারেন্ট ক্লাস এবং সাবক্লাসের মধ্যে একটি সম্পর্ক থাকে। এখানে, সাবক্লাসে প্যারেন্ট ক্লাসের সমস্ত ফিল্ড রয়েছে, এবং আপনি যদি প্যারেন্ট ক্লাস থেকে সাবক্লাসে ডেটা ম্যাপ করতে চান, তবে MapStruct এর মাধ্যমে এটি খুব সহজে করা যায়।
এখানে, একটি সাবক্লাসের জন্য প্যারেন্ট ক্লাসের ফিল্ড ম্যাপিং করা হবে, এবং এটি একই MapStruct Mapper ইন্টারফেস ব্যবহার করে সম্পন্ন করা হবে।
ধরা যাক, আমাদের একটি Person প্যারেন্ট ক্লাস এবং তার একটি Employee সাবক্লাস রয়েছে। Employee ক্লাসের মধ্যে কিছু অতিরিক্ত ফিল্ড যেমন employeeId
এবং department
রয়েছে, তবে name
এবং age
ফিল্ডগুলি Person ক্লাস থেকে এসেছে।
Person
এবং Subclass Employee
Person.java (Parent Class):
public class Person {
private String name;
private int age;
// Getters and Setters
}
Employee.java (Subclass):
public class Employee extends Person {
private String employeeId;
private String department;
// Getters and Setters
}
এখন, আমরা Person ক্লাস থেকে Employee ক্লাসে ডেটা ম্যাপ করতে চাই।
এখানে, PersonMapper
ইন্টারফেসে Person এবং Employee ক্লাসের মধ্যে ম্যাপিং ফাংশন থাকবে। আমাদের মূল লক্ষ্য হল, Person অবজেক্টকে Employee অবজেক্টে ম্যাপ করা।
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
// Mapping Person to Employee
Employee personToEmployee(Person person);
}
এখানে, PersonMapper ইন্টারফেসে personToEmployee
মেথডের মাধ্যমে Person থেকে Employee এ ম্যাপিং করা হচ্ছে। MapStruct স্বয়ংক্রিয়ভাবে প্যারেন্ট ক্লাসের ফিল্ড যেমন name
এবং age
সাবক্লাসে (Employee) ম্যাপ করবে।
এখন, Person অবজেক্টে ডেটা সেট করে এবং তার থেকে Employee অবজেক্টে ডেটা ম্যাপ করবো।
Main.java:
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("John Doe");
person.setAge(30);
// Using MapStruct Mapper
Employee employee = PersonMapper.INSTANCE.personToEmployee(person);
System.out.println("Employee Name: " + employee.getName());
System.out.println("Employee Age: " + employee.getAge());
System.out.println("Employee ID: " + employee.getEmployeeId()); // Should be null as it's not set
}
}
এখানে, MapStruct personToEmployee
মেথড ব্যবহার করে Person অবজেক্টের name
এবং age
ফিল্ড Employee অবজেক্টে ম্যাপ করবে। তবে, employeeId
এবং department
ফিল্ডগুলি Employee এর ফিল্ড হওয়ায় এটি null থাকবে, কারণ এগুলি Person ক্লাসের অংশ নয়।
MapStruct এর মাধ্যমে, আপনি প্যারেন্ট ক্লাসের ফিল্ড ম্যাপ করার পাশাপাশি সাবক্লাসে থাকা অতিরিক্ত ফিল্ডগুলির জন্য কাস্টম ম্যাপিংও করতে পারেন। উদাহরণস্বরূপ, যদি Employee ক্লাসে অতিরিক্ত একটি ফিল্ড থাকে যা Person থেকে পাওয়া যায় না, তবে আপনি সেটির জন্য কাস্টম ম্যাপিং যুক্ত করতে পারেন।
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "employeeId", expression = "java(\"EMP\" + person.getAge())")
Employee personToEmployee(Person person);
}
এখানে, employeeId ফিল্ডের জন্য কাস্টম এক্সপ্রেশন ব্যবহার করা হয়েছে, যা age
এর সাথে যুক্ত করে একটি আইডি তৈরি করবে।
Inheritance Mapping বা Subclass Mapping হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা MapStruct এর মাধ্যমে আপনি প্যারেন্ট এবং সাবক্লাসের মধ্যে ডেটা ম্যাপ করতে পারেন। এটি আপনার JavaBeans এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ট্রান্সফার প্রক্রিয়াকে আরও সহজ এবং কার্যকরী করে তোলে। MapStruct এর মাধ্যমে প্যারেন্ট ক্লাস থেকে সাবক্লাসে ডেটা ট্রান্সফার করা খুবই সহজ এবং কাস্টম ম্যাপিংয়ের জন্য সুবিধা প্রদান করে।
MapStruct একটি Java-based mapping framework যা compile-time কোড জেনারেট করে, এবং এটি মডেল (DTO) এবং ডোমেইন অবজেক্টগুলির মধ্যে দ্রুত এবং কার্যকরী ম্যাপিং সম্পাদন করতে সহায়তা করে। Inheritance বা উত্তরাধিকার সম্পর্কিত ম্যাপিং হচ্ছে একটি ব্যাপক ফিচার, যেখানে আপনি একটি ক্লাসের বৈশিষ্ট্যগুলি উপরের ক্লাস থেকে উত্তরাধিকার হিসেবে গ্রহণ করেন এবং তারপরে সেগুলিকে ম্যাপ করতে পারেন।
MapStruct এ Inheritance এর মাধ্যমে, আপনি সুপারক্লাস এবং সাবক্লাসের মধ্যে ডেটা ম্যাপিং করতে পারেন, যা কাস্টম ম্যাপিং এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) ব্যবহারকে আরও সহজ এবং কার্যকরী করে তোলে।
Inheritance হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণা, যেখানে একটি ক্লাস তার প্যারেন্ট ক্লাসের বৈশিষ্ট্য এবং আচরণ উত্তরাধিকারীভাবে গ্রহণ করে। MapStruct এ, Inheritance সাপোর্টের মাধ্যমে আপনি প্যারেন্ট ক্লাসের বৈশিষ্ট্যগুলিকে সাবক্লাসে ম্যাপ করতে পারেন।
ধরা যাক, আমাদের একটি Person নামক সুপারক্লাস রয়েছে এবং এর একটি সাবক্লাস Employee রয়েছে, যেটি Person ক্লাসের বৈশিষ্ট্যগুলিকে ইনহেরিট করেছে।
// Superclass: Person
public class Person {
private String name;
private int age;
// Getters and Setters
}
// Subclass: Employee
public class Employee extends Person {
private String jobTitle;
// Getters and Setters
}
এখানে, Employee ক্লাসের jobTitle ছাড়াও name এবং age প্যারেন্ট Person ক্লাস থেকে ইনহেরিট করা হয়েছে। এখন আমাদের Person এবং Employee এর মধ্যে ম্যাপিং করতে হবে।
MapStruct তে Inheritance ব্যবহার করতে হলে, এটি মূলত superclass (প্যারেন্ট ক্লাস) এবং subclass (সাবক্লাস) এর মধ্যে Object Mapping করতে ব্যবহৃত হয়। MapStruct স্বয়ংক্রিয়ভাবে প্যারেন্ট ক্লাসের ফিল্ডগুলো সাবক্লাসে ম্যাপ করতে পারে, তবে সাবক্লাসের জন্য কিছু অতিরিক্ত কাস্টম ম্যাপিং ফাংশন হতে পারে।
ধরা যাক, আমাদের Person এবং Employee এর মধ্যে ম্যাপিং করতে হবে।
PersonMapper.java (MapStruct Interface):
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
// Mapping Person to Employee (Inheritance)
@Mapping(source = "name", target = "fullName")
Employee personToEmployee(Person person);
}
এখানে, আমরা Person ক্লাসের name ফিল্ডকে Employee ক্লাসের fullName ফিল্ডে ম্যাপ করেছি। MapStruct প্যারেন্ট ক্লাসের অন্যান্য ফিল্ড (যেমন age) ম্যাপ করবে স্বয়ংক্রিয়ভাবে, এবং কোনো কাস্টম ম্যাপিংয়ের প্রয়োজন না হলে আপনি এটি বাদ দিতে পারেন।
ধরা যাক, আপনি যদি Person এবং Employee এর মধ্যে আরো বিস্তারিতভাবে ম্যাপিং করতে চান (যেমন, Employee এর jobTitle এর জন্য কাস্টম ম্যাপিং), তবে আপনি সেই অনুযায়ী কাস্টম ম্যাপিং কোড তৈরি করতে পারেন।
// Superclass: Person
public class Person {
private String name;
private int age;
// Getters and Setters
}
// Subclass: Employee
public class Employee extends Person {
private String jobTitle;
// Getters and Setters
}
// MapStruct Mapper
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
// Mapping Person to Employee (with custom jobTitle mapping)
@Mapping(source = "name", target = "fullName")
@Mapping(source = "jobTitle", target = "position")
Employee personToEmployee(Person person);
}
এখানে, name এবং jobTitle ফিল্ডগুলোকে Employee এর fullName এবং position ফিল্ডে ম্যাপ করা হচ্ছে।
MapStruct ইনহেরিটেড ইন্টারফেসও সাপোর্ট করে। আপনি যদি একটি ইন্টারফেসের মাধ্যমে একাধিক ক্লাস ম্যাপ করতে চান, তবে এটি খুবই সহজ।
// Superclass Interface: Person
public interface Person {
String getName();
int getAge();
}
// Subclass: Employee
public class Employee implements Person {
private String name;
private int age;
private String jobTitle;
// Getters and Setters
}
// Mapper Interface
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
// Mapping Person to Employee
@Mapping(source = "name", target = "fullName")
@Mapping(source = "jobTitle", target = "position")
Employee personToEmployee(Person person);
}
এখানে, Person ইন্টারফেস এবং Employee ক্লাসের মধ্যে MapStruct ম্যাপিং করা হয়েছে, যেখানে PersonMapper মেথডের মাধ্যমে ম্যাপিং করা হচ্ছে।
MapStruct একাধিক স্তরের ইনহেরিটেন্স সাপোর্ট করে, অর্থাৎ আপনি যদি একাধিক স্তরের ক্লাস হিরার্কি (যেমন: Grandparent, Parent, Child) ব্যবহার করেন, তবে আপনি এগুলোর মধ্যে ম্যাপিং করতে পারবেন।
// Grandparent Class
public class Grandparent {
private String familyName;
// Getters and Setters
}
// Parent Class inheriting Grandparent
public class Parent extends Grandparent {
private String firstName;
// Getters and Setters
}
// Child Class inheriting Parent
public class Child extends Parent {
private String nickname;
// Getters and Setters
}
এখন, MapStruct এর মাধ্যমে এই একাধিক স্তরের ক্লাসগুলোর মধ্যে ডেটা ম্যাপিং করা যেতে পারে।
@Mapper
public interface FamilyMapper {
FamilyMapper INSTANCE = Mappers.getMapper(FamilyMapper.class);
@Mapping(source = "familyName", target = "lastName")
@Mapping(source = "firstName", target = "firstName")
Child parentToChild(Parent parent);
}
এখানে, FamilyMapper মাপারের মাধ্যমে Parent থেকে Child এর মধ্যে ডেটা ম্যাপিং করা হয়েছে।
Inheritance MapStruct এ একটি শক্তিশালী বৈশিষ্ট্য যা প্যারেন্ট ক্লাস এবং সাবক্লাসের মধ্যে ডেটা ম্যাপিং করতে সহায়তা করে। MapStruct এর মাধ্যমে ইনহেরিটেড ক্লাসগুলির মধ্যে ডেটা ট্রান্সফার অবজেক্ট (DTO) বা ডোমেইন অবজেক্টগুলির মধ্যে দ্রুত এবং কার্যকরী ম্যাপিং করা যায়। এটি কোড পুনরায় ব্যবহার, কাস্টম ম্যাপিং, এবং সহজ রক্ষণাবেক্ষণ নিশ্চিত করে। MapStruct ইনহেরিটেন্সের মাধ্যমে বিভিন্ন স্তরের ক্লাস হিরার্কি, ইন্টারফেস এবং মেথডের মধ্যে সুনির্দিষ্টভাবে ম্যাপিং সম্পাদন করতে সক্ষম।
MapStruct একটি Java annotation processor ব্যবহার করে ডোমেইন অবজেক্ট (POJOs) এর মধ্যে ম্যাপিং সম্পাদন করে। এক্ষেত্রে, যদি আপনার Superclass এবং Subclass থাকে এবং আপনি তাদের মধ্যে ম্যাপিং করতে চান, MapStruct তাও সহজে সমাধান করতে পারে। Subclass এবং Superclass এর মধ্যে Mapping এর উদ্দেশ্য হল, সুপারক্লাস এবং সাবক্লাসের মধ্যে ডেটা ট্রান্সফার করার প্রক্রিয়া।
MapStruct এ Inheritance Mapping খুবই সহজ এবং এটি @Mapping অ্যানোটেশন ব্যবহার করে কনফিগার করা যায়, যেখানে সাবক্লাসের ডেটা সুপারক্লাসে বা সুপারক্লাসের ডেটা সাবক্লাসে ম্যাপ করা হয়।
MapStruct কে ব্যবহার করে, আপনি Superclass এবং Subclass এর মধ্যে ম্যাপিং করতে পারেন। MapStruct এর মাধ্যমে, আপনি Superclass থেকে Subclass অথবা Subclass থেকে Superclass তে ডেটা ম্যাপিং করতে পারবেন। এটি একটি সাধারণ মডেল মেপিং প্রক্রিয়া যা inheritance (উত্তরাধিকার) এর ভিত্তিতে কাজ করে।
ধরা যাক, আমাদের কাছে একটি Superclass (Parent Class) এবং একটি Subclass (Child Class) রয়েছে, এবং আমাদের এই দুটি ক্লাসের মধ্যে ম্যাপিং করতে হবে।
public class Person {
private String name;
private int age;
// Getters and Setters
}
public class Employee extends Person {
private String department;
// Getters and Setters
}
এখানে, Employee ক্লাসটি Person ক্লাসকে extends করে, তাই Employee ক্লাসে Person ক্লাসের সব ফিল্ড (name, age) মিরর করা হবে।
এখন, আমাদের একটি Mapper Interface তৈরি করতে হবে যা Person এবং Employee ক্লাসের মধ্যে ম্যাপিং করবে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonEmployeeMapper {
PersonEmployeeMapper INSTANCE = Mappers.getMapper(PersonEmployeeMapper.class);
// Mapping method from Person to Employee
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", constant = "IT") // Example of setting a constant value for department
Employee personToEmployee(Person person);
// Mapping method from Employee to Person (If needed)
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
Person employeeToPerson(Employee employee);
}
personToEmployee
মেথডে, Person অবজেক্টকে Employee অবজেক্টে ম্যাপ করা হয়েছে।@Mapping
অ্যানোটেশন ব্যবহার করে আপনি ফিল্ড ম্যাপিং কনফিগার করেছেন।এভাবে, আপনি Superclass এবং Subclass এর মধ্যে ডেটা ম্যাপিং করতে পারেন। উপরে দেওয়া উদাহরণে, আমরা Person থেকে Employee তে এবং Employee থেকে Person তে ডেটা ম্যাপ করেছি।
MapStruct ইনহেরিটেন্স (Inheritance) ম্যাপিংয়ের ক্ষেত্রে কিছু অতিরিক্ত বৈশিষ্ট্য সরবরাহ করে:
@Mapper
public interface PolymorphicMapper {
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
Person polymorphicToPerson(Employee employee);
}
এখানে, Employee থেকে Person এ পোলিমরফিক ম্যাপিং করার চেষ্টা করা হচ্ছে।
MapStruct কে ব্যবহার করে Superclass এবং Subclass এর মধ্যে ম্যাপিং করা খুবই সহজ। এটি ডোমেইন অবজেক্টগুলির মধ্যে inheritance সম্পর্কিত ডেটা ট্রান্সফার বা ম্যাপিং করার জন্য একটি শক্তিশালী উপায় প্রদান করে। MapStruct এর সাহায্যে আপনি @Mapping অ্যানোটেশন ব্যবহার করে এবং compile-time code generation সুবিধার মাধ্যমে সুপারক্লাস এবং সাবক্লাসের মধ্যে খুব সহজে এবং দ্রুত ডেটা ম্যাপ করতে পারবেন।
Polymorphic Mapping হল MapStruct এর একটি বৈশিষ্ট্য যা আপনাকে বিভিন্ন ক্লাসের অবজেক্টগুলির মধ্যে ম্যাপিং করতে সহায়তা করে, যখন তারা একই বেস ক্লাস বা ইন্টারফেস থেকে উৎসাহিত হয়। এটি সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একাধিক সাব ক্লাস বা ইন্টারফেসের মধ্যে ডেটা ট্রান্সফার করতে চান, কিন্তু আপনি বেস ক্লাস বা ইন্টারফেসের সাধারণ ফাংশনালিটি ব্যবহার করতে চান।
MapStruct এর মাধ্যমে polymorphic mapping করতে হলে, আপনাকে সঠিকভাবে @Mapping অ্যানোটেশন ব্যবহার করতে হবে এবং Inheritance বা Interfaces এর মাধ্যমে ম্যাপিং সম্পন্ন করতে হবে।
Polymorphic Mapping এমন একটি প্রক্রিয়া যেখানে আপনি একটি base class বা interface এবং তার subclasses বা implementations এর মধ্যে ম্যাপিং করেন। যদি আপনি একটি List বা Set থেকে ডেটা ম্যাপ করতে চান এবং তার মধ্যে বিভিন্ন ধরনের অবজেক্ট থাকে (যেমন একটি বেস ক্লাসের বিভিন্ন সাবক্লাস), তাহলে Polymorphic Mapping ব্যবহৃত হয়।
ধরা যাক, আমাদের একটি বেস ক্লাস Employee রয়েছে এবং তার দুটি সাব ক্লাস Manager এবং Developer রয়েছে। আমাদের উদ্দেশ্য হলো, Employee এর একটি সাব ক্লাসকে অন্য এক ডেটা ট্রান্সফার অবজেক্টে (DTO) ম্যাপ করা।
Employee.java (Base class):
public class Employee {
private String name;
private int age;
// Getters and Setters
}
Manager.java (Sub class):
public class Manager extends Employee {
private String department;
// Getters and Setters
}
Developer.java (Sub class):
public class Developer extends Employee {
private String programmingLanguage;
// Getters and Setters
}
এখানে, Employee হল বেস ক্লাস এবং Manager ও Developer হল সাব ক্লাস।
এখন আমরা EmployeeDTO, ManagerDTO, এবং DeveloperDTO তৈরি করব, যা আমাদের ট্রান্সফার অবজেক্ট (DTO) হবে।
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
// Getters and Setters
}
ManagerDTO.java (DTO):
public class ManagerDTO extends EmployeeDTO {
private String department;
// Getters and Setters
}
DeveloperDTO.java (DTO):
public class DeveloperDTO extends EmployeeDTO {
private String programmingLanguage;
// Getters and Setters
}
এখানে, ManagerDTO এবং DeveloperDTO EmployeeDTO
থেকে এক্সটেন্ড করা হয়েছে।
এখন, আমরা MapStruct Mapper ইন্টারফেস তৈরি করব, যা বেস ক্লাস এবং তার সাব ক্লাসের মধ্যে ম্যাপিং করবে।
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
// Polymorphic Mapping
EmployeeDTO employeeToEmployeeDTO(Employee employee);
ManagerDTO managerToManagerDTO(Manager manager);
DeveloperDTO developerToDeveloperDTO(Developer developer);
}
এখানে:
employeeToEmployeeDTO
মেথডটি Employee এর সমস্ত সাব ক্লাসের জন্য কাজ করবে।managerToManagerDTO
এবং developerToDeveloperDTO
মেথড দুটি নির্দিষ্ট ক্লাসের জন্য ম্যাপিং করবে।এখন আমরা EmployeeMapper ইন্টারফেস ব্যবহার করে polymorphic mapping করব। এই উদাহরণে, আমরা Employee, Manager, এবং Developer এর মধ্যে ডেটা ট্রান্সফার করব।
Main.java (Usage):
public class Main {
public static void main(String[] args) {
// Creating Manager object
Manager manager = new Manager();
manager.setName("John Doe");
manager.setAge(45);
manager.setDepartment("Engineering");
// Creating Developer object
Developer developer = new Developer();
developer.setName("Jane Smith");
developer.setAge(30);
developer.setProgrammingLanguage("Java");
// Polymorphic Mapping
EmployeeDTO managerDTO = EmployeeMapper.INSTANCE.employeeToEmployeeDTO(manager);
EmployeeDTO developerDTO = EmployeeMapper.INSTANCE.employeeToEmployeeDTO(developer);
System.out.println("Manager DTO: " + managerDTO.getName() + ", " + managerDTO.getAge());
System.out.println("Developer DTO: " + developerDTO.getName() + ", " + developerDTO.getAge());
}
}
এখানে, employeeToEmployeeDTO
মেথডটি Manager এবং Developer উভয়ের ক্ষেত্রেই কাজ করবে, কারণ এটি polymorphic mapping-এর জন্য প্রস্তুত।
এই কোড চালানোর পর, EmployeeMapper এর মাধ্যমে Manager এবং Developer অবজেক্টগুলির EmployeeDTO তে ম্যাপিং হবে এবং তাদের তথ্য আউটপুট হবে।
Manager DTO: John Doe, 45
Developer DTO: Jane Smith, 30
এখানে, EmployeeMapper বেস ক্লাস Employee এবং তার সাব ক্লাস Manager এবং Developer এর মধ্যে polymorphic ম্যাপিং সম্পন্ন করেছে।
Polymorphic Mapping MapStruct এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একাধিক সাব ক্লাসের মধ্যে ডেটা ট্রান্সফার করতে সহায়তা করে। এই কৌশলের মাধ্যমে, আপনি base class বা interface ব্যবহার করে subclasses এর মধ্যে ম্যাপিং কার্যক্রম সম্পন্ন করতে পারেন। এতে কোডের পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি পায়, এবং একাধিক ম্যাপিং মেথড লেখার প্রয়োজনীয়তা কমে।
Read more