Mapping Methods কি এবং কিভাবে কাজ করে

Mapping Methods তৈরি - ম্যাপস্ট্রাক্ট (MapStruct) - Java Technologies

397

MapStruct একটি কোড জেনারেশন টুল যা Java Beans এর মধ্যে ডেটা ম্যাপিং অটোমেটিক্যালি সম্পন্ন করে। MapStruct সাধারণত DTO (Data Transfer Object) এবং Entity ক্লাসের মধ্যে ডেটা ম্যাপিং করার জন্য ব্যবহৃত হয়। এর মাধ্যমে, আপনি সোজাসুজি কোড লিখে একটি অবজেক্ট থেকে অন্য অবজেক্টে ডেটা ট্রান্সফার করতে পারেন, যা সাধারণত ম্যানুয়ালি করা হয়।

Mapping Methods হল MapStruct এর গুরুত্বপূর্ণ অংশ, যেখানে আপনি Java Beans এর মধ্যে ডেটা ম্যাপিং করার জন্য বিশেষ মেথড তৈরি করেন। এই মেথডগুলো MapStruct অটোমেটিক্যালি কোড জেনারেট করার সময় ব্যবহার করে এবং ডেটা ট্রান্সফরমেশন সম্পন্ন করে।

এই টিউটোরিয়ালে আমরা Mapping Methods কী এবং MapStruct এর মাধ্যমে কীভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করব।


১. Mapping Methods কী?

Mapping Methods হল সেই মেথডগুলো যা MapStruct দ্বারা কোড জেনারেশন করতে ব্যবহৃত হয়, যাতে একটি অবজেক্টের ডেটা অন্য অবজেক্টে স্থানান্তরিত হয়। এগুলি Mapper Interface এর অংশ হিসেবে থাকে এবং MapStruct এর মাধ্যমে এই মেথডগুলোর জন্য কোড অটোমেটিক্যালি জেনারেট হয়।

এই মেথডগুলির মাধ্যমে আপনি DTO থেকে Entity বা একটি অবজেক্ট থেকে অন্য অবজেক্টে ডেটা ম্যানিপুলেশন করতে পারেন।


২. Mapping Methods কিভাবে কাজ করে?

MapStruct Mapper Interface এর মাধ্যমে ডেটা ম্যাপিং পরিচালনা করে। একটি Mapper Interface ডিফাইন করে, যা source object (যেমন Person ক্লাস) এবং target object (যেমন PersonDTO ক্লাস) এর মধ্যে ডেটা ম্যাপিং সম্পর্কিত নির্দেশনা দেয়।

২.১ Mapping Method উদাহরণ

ধরা যাক, আপনার দুটি ক্লাস আছে:

  1. Person (Entity Class)
  2. PersonDTO (DTO Class)

আমরা Person অবজেক্ট থেকে PersonDTO অবজেক্টে ডেটা ম্যাপ করতে চাই।

Person.java (Entity Class):

public class Person {
    private String firstName;
    private String lastName;

    // getters and setters
}

PersonDTO.java (DTO Class):

public class PersonDTO {
    private String firstName;
    private String lastName;

    // getters and setters
}

এখন, আপনি একটি Mapper Interface তৈরি করবেন যা এই দুই ক্লাসের মধ্যে ডেটা ম্যাপ করবে:

PersonMapper.java (Mapper Interface):

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    PersonDTO personToPersonDTO(Person person);
}

এখানে:

  • PersonMapper একটি Mapper Interface যা personToPersonDTO নামক একটি mapping method ডিফাইন করে, যা Person অবজেক্ট থেকে PersonDTO তে ডেটা ম্যাপ করবে।
  • Mappers.getMapper(PersonMapper.class): MapStruct এর মাধ্যমে কোড জেনারেট করা হয়, যার মাধ্যমে এই মেথডটি বাস্তবায়িত হয়।

৩. Mapping Method কিভাবে কাজ করে?

MapStruct কম্পাইল টাইমে একটি কনক্রিট ক্লাস তৈরি করে, যেটি আপনার Mapper Interface এর mapping method গুলি বাস্তবায়ন করে। একে code generation বলা হয়, যেখানে MapStruct কোডটি রানটাইমে তৈরি করে, তাই এটি performance দ্রুত এবং type-safe

৩.১ Code Generation

আপনি যখন mvn compile কমান্ড রান করবেন, তখন MapStruct একটি ক্লাস তৈরি করবে (যেমন PersonMapperImpl) এবং এতে আপনার personToPersonDTO মেথডের কোড থাকবে। এই কোডটি Person অবজেক্টের প্রোপার্টি PersonDTO তে স্থানান্তর করবে।

৩.২ Using Mapping Method

কোড জেনারেশন হওয়ার পরে, আপনি এটি ব্যবহার করতে পারবেন:

Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");

PersonDTO personDTO = PersonMapper.INSTANCE.personToPersonDTO(person);
System.out.println(personDTO.getFirstName());  // Output: John
System.out.println(personDTO.getLastName());   // Output: Doe

এখানে, PersonMapper.INSTANCE.personToPersonDTO(person) কল করার মাধ্যমে Person অবজেক্টের ডেটা PersonDTO তে ম্যাপ হবে।


৪. Multiple Mapping Methods

MapStruct এর মাধ্যমে একাধিক Mapping Methods তৈরি করা সম্ভব, যেখানে আপনি একাধিক অবজেক্টের মধ্যে ডেটা ম্যাপিং করতে পারেন। উদাহরণস্বরূপ, Person থেকে Employee তে ডেটা ট্রান্সফরমেশন।

উদাহরণ: Multiple Mapping Methods

ধরা যাক, আপনার আরো একটি EmployeeDTO ক্লাস আছে:

EmployeeDTO.java:

public class EmployeeDTO {
    private String name;
    private String position;

    // getters and setters
}

এখন, আপনি Person থেকে EmployeeDTO তে ম্যাপিং করার জন্য আলাদা একটি mapping method তৈরি করতে পারেন:

PersonMapper.java:

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    PersonDTO personToPersonDTO(Person person);

    // New mapping method
    EmployeeDTO personToEmployeeDTO(Person person);
}

এখানে, personToEmployeeDTO মেথডটি Person অবজেক্ট থেকে EmployeeDTO তে ডেটা ম্যাপ করবে।


৫. Custom Mapping Methods

আপনি কাস্টম ম্যাপিংও তৈরি করতে পারেন যেখানে কোনো বিশেষ কনভার্সন বা ট্রান্সফরমেশন প্রয়োজন হয়। উদাহরণস্বরূপ, যদি আপনার Person ক্লাসে ফিল্ডের নাম firstName এবং lastName থাকে, কিন্তু EmployeeDTO তে একটি ফিল্ডের নাম fullName থাকে, তাহলে আপনি একটি কাস্টম ম্যাপিং মেথড তৈরি করতে পারেন।

উদাহরণ: Custom Mapping Method

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    // Custom Mapping Method
    @Mapping(source = "firstName", target = "fullName")
    EmployeeDTO personToEmployeeDTO(Person person);
}

এখানে, @Mapping অ্যনোটেশন ব্যবহার করে firstName কে fullName এ ম্যাপ করা হয়েছে।


৬. Mapping Collections

MapStruct বিভিন্ন ধরনের Collections (যেমন List, Set) এর মধ্যে ডেটা ম্যাপিংও সমর্থন করে। আপনি একটি List থেকে List এ ডেটা ম্যাপ করতে পারেন।

উদাহরণ: Mapping Collections

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    List<PersonDTO> personListToPersonDTOList(List<Person> persons);
}

এখানে, personListToPersonDTOList মেথডটি একটি List থেকে List তে ডেটা ম্যাপ করবে।


৭. MapStruct এবং Null Handling

MapStruct স্বয়ংক্রিয়ভাবে null মান হ্যান্ডেল করে এবং কোনো null অবজেক্ট থাকলে, এটি সাধারণত null হিসাবে ট্রান্সফার করে। আপনি যদি বিশেষভাবে null হ্যান্ডলিং কাস্টমাইজ করতে চান, তবে @Mapping অ্যনোটেশন ব্যবহার করে nullValueCheckStrategy অথবা defaultValue সেট করতে পারেন।

উদাহরণ: Null Handling in MapStruct

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    @Mapping(target = "lastName", defaultValue = "Unknown")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, যদি lastName ফিল্ডের মান null হয়, তবে এটি "Unknown" সেট হবে।


সারাংশ

MapStruct একটি শক্তিশালী টুল যা Java Beans এর মধ্যে ডেটা ট্রান্সফরমেশন সহজ এবং দ্রুত করে তোলে। Mapping Methods হল সেই পদ্ধতিগুলি যা Mapper Interface এর মাধ্যমে source এবং target অবজেক্টের মধ্যে ডেটা ম্যাপিং সম্পন্ন করে। MapStruct কোড জেনারেশন করে, যাতে কম্পাইল টাইমে ডেটা ম্যাপিং দ্রুত এবং নিরাপদ হয়।

এছাড়া, MapStruct nested objects, collections, custom mapping এবং null handling সহ বিভিন্ন ধরনের ডেটা ম্যাপিং সমর্থন করে, যা ডেটা ট্রান্সফরমেশন প্রক্রিয়াকে আরও সহজ এবং দ্রুত করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...