Mapping Collections এবং Arrays

Java Technologies - ম্যাপস্ট্রাক্ট (MapStruct)
193
193

MapStruct একটি Java annotation processor যা সহজ এবং দ্রুত মডেল ম্যাপিং করতে ব্যবহৃত হয়। এটি compile-time এ কোড জেনারেট করে এবং runtime পারফরম্যান্সে কোনো প্রভাব ফেলে না। MapStruct এর মাধ্যমে আপনি Collections (যেমন, List, Set) এবং Arrays এর মধ্যে ম্যাপিং খুব সহজে করতে পারেন।

এই টিউটোরিয়ালে, আমরা Collections এবং Arrays এর মধ্যে ম্যাপিং করার ধারণা এবং উদাহরণ দেখব।


১. Collections এবং Arrays Mapping

ম্যাপস্ট্রাক্টে, আপনি এক ধরনের Collection (যেমন List, Set) অথবা Array থেকে অন্য ধরনের Collection বা Array তে ডেটা ম্যাপ করতে পারেন। এই প্রক্রিয়াটি MapStruct সঠিকভাবে পরিচালনা করে এবং প্রতিটি উপাদান (element) এর মধ্যে ম্যাপিং তৈরি করে।

১.১ List Mapping

MapStruct List বা অন্যান্য Collection এর মধ্যে ম্যাপিং করার জন্য স্বয়ংক্রিয়ভাবে প্রতিটি উপাদান ম্যাপ করে। যখন আপনি List এর ম্যাপিং করেন, তখন আপনি প্রতিটি List উপাদানকে কাস্টম ম্যাপিং ফাংশন ব্যবহার করে ম্যাপ করতে পারেন।

উদাহরণ: List Mapping

ধরা যাক, আমাদের একটি Person এবং PersonDTO ক্লাস রয়েছে এবং তাদের মধ্যে List এর মধ্যে ম্যাপিং করতে চাই।

Person.java (Domain Object):

public class Person {
    private String name;
    private int age;

    // Getters and Setters
}

PersonDTO.java (DTO):

public class PersonDTO {
    private String name;
    private int age;

    // Getters and Setters
}

PersonMapper.java (Mapper Interface):

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;

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

    // Mapping List of Person to List of PersonDTO
    List<PersonDTO> personListToPersonDTOList(List<Person> personList);
}

এখানে, List থেকে List তে ম্যাপিং করা হচ্ছে। MapStruct প্রতিটি Person অবজেক্টকে PersonDTO তে ম্যাপ করবে।

১.২ Set Mapping

Set এর মধ্যে ম্যাপিং করতে হলে, MapStruct সেই ধরনের ম্যাপিংকে খুব সহজভাবে পরিচালনা করে, কারণ এটি প্রতিটি উপাদান আলাদাভাবে ম্যাপ করে।

উদাহরণ: Set Mapping

import java.util.Set;

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

    // Mapping Set of Person to Set of PersonDTO
    Set<PersonDTO> personSetToPersonDTOSet(Set<Person> personSet);
}

এখানে, Set<Person> থেকে Set<PersonDTO> তে ম্যাপিং করা হচ্ছে। MapStruct এর মাধ্যমে সেটের প্রতিটি উপাদান ম্যাপ হবে।

১.৩ Array Mapping

MapStruct ব্যবহার করে Array এর মধ্যে ম্যাপিং করতে হলে, আপনি খুব সহজে এটি করতে পারবেন। এটি একটি সাধারণ ম্যাপিং এবং প্রায় একইভাবে কাজ করে, যেমন আপনি List বা Set এর সাথে ম্যাপিং করেন।

উদাহরণ: Array Mapping

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

    // Mapping Array of Person to Array of PersonDTO
    PersonDTO[] personArrayToPersonDTOArray(Person[] personArray);
}

এখানে, Person[] থেকে PersonDTO[] তে ম্যাপিং করা হচ্ছে।


২. Nested Collections and Arrays Mapping

আপনি যদি nested collections (যেমন, একটি List যার মধ্যে List রয়েছে) অথবা nested arrays (যেমন, একটি Person[] যার মধ্যে PersonDTO[] রয়েছে) ম্যাপ করতে চান, তাহলে MapStruct এটিও সমর্থন করে। আপনাকে শুধু MapStruct Mapper এর মধ্যে nested types এর জন্য ম্যাপিং কনফিগারেশন করতে হবে।

উদাহরণ: Nested List Mapping

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

    // Nested List Mapping: Mapping List<List<Person>> to List<List<PersonDTO>>
    List<List<PersonDTO>> personListListToPersonDTOListList(List<List<Person>> personListList);
}

এখানে, একটি List<List> কে List<List> তে ম্যাপ করা হচ্ছে।


৩. MapStruct এর মাধ্যমে Collections এবং Arrays Mapping এর সুবিধা

  • Performance: MapStruct কোড জেনারেট করার সময় compile-time এ কোড তৈরি করে, যা রানটাইমে দ্রুত কাজ করে এবং পারফরম্যান্সে কোনো প্রভাব ফেলবে না।
  • Type Safety: MapStruct টাইপ-সেফ ম্যাপিং তৈরি করে, যা কোডের মধ্যে টাইপ মিসম্যাচের কারণে ত্রুটি সৃষ্টি হতে দেয় না।
  • Ease of Use: MapStruct ব্যবহার করার মাধ্যমে কোডটি স্বয়ংক্রিয়ভাবে জেনারেট হয়, যা ডেভেলপারদের জন্য খুবই সুবিধাজনক এবং সময় সাশ্রয়ী।
  • Integration: এটি সহজেই Spring, JPA এবং অন্যান্য ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করা যায়।

৪. MapStruct Collections এবং Arrays Mapping এর জন্য কাস্টম কনভার্সন

এটি বেশ সাধারণ যে, কিছু ক্ষেত্রে আপনি Collections এবং Arrays এর মধ্যে কাস্টম কনভার্সন প্রয়োগ করতে চাইবেন। MapStruct আপনাকে এই কাস্টম কনভার্সন ফাংশন ব্যবহারের সুযোগ দেয়।

উদাহরণ: Custom Collection Mapping

ধরা যাক, আপনি একটি List কে List তে কাস্টম ম্যাপিং করতে চান, যেখানে String এর মানগুলো Integer এ কনভার্ট হবে।

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

    // Custom List Mapping: Mapping List<String> to List<Integer> using custom logic
    List<Integer> stringListToIntegerList(List<String> stringList);

    default Integer stringToInteger(String value) {
        return Integer.parseInt(value);
    }
}

এখানে, stringListToIntegerList মেথডে কাস্টম কনভার্সন যুক্ত করা হয়েছে, যা String থেকে Integer এ রূপান্তর করবে।


সারাংশ

MapStruct এর মাধ্যমে Collections (যেমন List, Set) এবং Arrays এর মধ্যে ম্যাপিং করা খুবই সহজ। এটি nested collections এবং arrays এর মধ্যেও ম্যাপিং করতে সহায়তা করে, এবং custom mapping এর সুযোগ প্রদান করে। MapStruct এর মাধ্যমে আপনি পারফরম্যান্স উন্নত করতে পারেন কারণ এটি compile-time এ কোড জেনারেট করে, যা রানটাইমে অতিরিক্ত লোড তৈরি করে না।

MapStruct এর ব্যবহার সহজ এবং কোড মেইনটেন্যান্স এবং উন্নয়নের জন্য কার্যকরী, বিশেষ করে যখন বড় এবং জটিল ডেটা ম্যাপিং এর কাজ করতে হয়।


Content added By

Collection (List, Set) এবং Array Mapping এর ধারণা

85
85

MapStruct হল একটি annotation processor ভিত্তিক টুল যা JavaBeans (POJOs) বা ডোমেইন অবজেক্টগুলির মধ্যে ম্যাপিং সম্পন্ন করার জন্য ব্যবহৃত হয়। এর মাধ্যমে, আপনি সহজে এবং দ্রুত Collection (List, Set) এবং Array Mapping করতে পারেন। MapStruct ডেটার এক ধরনের সংগ্রহ বা আয়োজন থেকে অন্য ধরনের সংগ্রহে ম্যাপিং করার জন্য খুবই কার্যকরী এবং নির্ভরযোগ্য।

এই টিউটোরিয়ালে, আমরা দেখব কীভাবে MapStruct ব্যবহার করে Collection এবং Array ম্যাপিং করা যায়।


১. Collection (List, Set) Mapping এর ধারণা

MapStruct Collection (List, Set) ম্যাপিং এর জন্য অটোমেটিক সমাধান প্রদান করে। যখন আপনি একটি List বা Set অবজেক্টের মধ্যে ম্যাপিং করতে চান, তখন MapStruct প্রতিটি উপাদানকে এক ক্লাস থেকে অন্য ক্লাসে ম্যাপ করবে। এতে আপনাকে প্রতিটি উপাদানকে ম্যাপ করার জন্য আলাদাভাবে কোড লেখার প্রয়োজন হয় না। MapStruct এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে।

১.১ List Mapping Example

ধরা যাক, আমাদের একটি Employee ক্লাস এবং EmployeeDTO ক্লাস রয়েছে, এবং আমরা List থেকে List এ ডেটা ম্যাপ করতে চাই।

Employee.java:

public class Employee {
    private String name;
    private String department;
    
    // Getters and Setters
}

EmployeeDTO.java:

public class EmployeeDTO {
    private String name;
    private String department;
    
    // Getters and Setters
}

EmployeeMapper.java (Mapper Interface):

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;

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

    List<EmployeeDTO> employeesToEmployeeDTOs(List<Employee> employees);
}

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

১.২ Set Mapping Example

এছাড়াও Set এর মধ্যে ম্যাপিং করার জন্য MapStruct একইভাবে কাজ করে। যদি আপনি Set থেকে Set ম্যাপ করতে চান, তাহলে এর জন্য কোনো আলাদা কোড লেখা দরকার নেই। একই ম্যাপার ইন্টারফেস ব্যবহার করা যাবে।

EmployeeMapper.java (Set Mapping):

import java.util.Set;

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

    Set<EmployeeDTO> employeesToEmployeeDTOs(Set<Employee> employees);
}

এখানে, employeesToEmployeeDTOs মেথডটি Set থেকে Set এ ডেটা ম্যাপ করবে।


২. Array Mapping এর ধারণা

MapStruct ব্যবহার করে আপনি Array ম্যাপিংও করতে পারেন। এটি List বা Set এর মতই কাজ করে, যেখানে প্রতিটি উপাদানকে এক টাইপ থেকে অন্য টাইপে ম্যাপ করা হয়।

২.১ Array Mapping Example

ধরা যাক, আমাদের Employee এবং EmployeeDTO ক্লাসের একটি অ্যারে রয়েছে এবং আমরা এই অ্যারের মধ্যে ম্যাপিং করতে চাই।

Employee.java:

public class Employee {
    private String name;
    private String department;

    // Getters and Setters
}

EmployeeDTO.java:

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

    // Getters and Setters
}

EmployeeMapper.java (Array Mapping):

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

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

    EmployeeDTO[] employeesToEmployeeDTOs(Employee[] employees);
}

এখানে, employeesToEmployeeDTOs মেথডটি Employee[] থেকে EmployeeDTO[] এ ডেটা ম্যাপ করবে।


৩. Collection এবং Array Mapping এর মধ্যে পার্থক্য

  1. List/Set: এগুলি Java Collection Framework এর অংশ এবং ডাইনামিক আকারে ডেটা ধারণ করতে সক্ষম।
  2. Array: Arrays একধরনের স্থির ডেটা সংগ্রহ যা নির্দিষ্ট আকারের থাকে এবং পারফরম্যান্সের জন্য অনেক দ্রুত।

যদিও List, Set, এবং Array সবগুলোই ম্যাপিংয়ের জন্য ব্যবহার করা যেতে পারে, তবে Arrays সাধারণত কমপ্লেক্স ডেটা স্ট্রাকচারের তুলনায় অনেক দ্রুত এবং কম মেমরি ব্যবহার করে।


৪. Advanced Mapping with Collection and Array

৪.১ Using MapStruct for Nested Collection Mapping

MapStruct আপনি Nested Collection ম্যাপিংও সহজেই করতে পারবেন। ধরুন আপনার একটি Employee ক্লাস রয়েছে, যেখানে Address (অন্য ক্লাস) রয়েছে, এবং আপনি List এর মধ্যে List ম্যাপ করতে চান, এটি MapStruct দ্বারা খুব সহজেই সম্পন্ন করা যায়।

Employee.java:

public class Employee {
    private String name;
    private Address address;

    // Getters and Setters
}

Address.java:

public class Address {
    private String street;
    private String city;

    // Getters and Setters
}

EmployeeDTO.java:

public class EmployeeDTO {
    private String name;
    private AddressDTO address;

    // Getters and Setters
}

AddressDTO.java:

public class AddressDTO {
    private String street;
    private String city;

    // Getters and Setters
}

EmployeeMapper.java (Nested Collection Mapping):

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;

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

    List<EmployeeDTO> employeesToEmployeeDTOs(List<Employee> employees);
    
    AddressDTO addressToAddressDTO(Address address);
}

এখানে, EmployeeMapper ইন্টারফেসে List থেকে List ম্যাপ করার সময় Address অবজেক্টও স্বয়ংক্রিয়ভাবে AddressDTO তে ম্যাপ হবে।


৫. MapStruct এবং Collection/Array Mapping এর পারফরম্যান্স

MapStruct compile-time কোড জেনারেট করে, তাই এটি Collection বা Array ম্যাপিংয়ের জন্য দ্রুত এবং পারফরম্যান্সে কোনো সমস্যা সৃষ্টি করে না। এটি List, Set, এবং Array ম্যাপিংয়ের জন্য no reflection ব্যবহার করে, ফলে এটি দ্রুততর এবং অধিক কার্যকরী।


সারাংশ

MapStruct আপনাকে Collection (List, Set) এবং Array ম্যাপিং এর জন্য খুবই সহজ এবং কার্যকরী সমাধান প্রদান করে। এটি List থেকে List বা Employee[] থেকে EmployeeDTO[] এর মতো ম্যাপিং করতে পারে। Nested Object Mapping এবং Custom Collection Mapping এর জন্য MapStruct অত্যন্ত কার্যকরী এবং টাইপ সেফ মডেল ম্যাপিং প্রক্রিয়া নিশ্চিত করে। MapStruct আপনাকে ডেটা ট্রান্সফার অবজেক্টের মধ্যে ডেটা স্থানান্তর করতে সাহায্য করে, এবং কোড জেনারেট করার মাধ্যমে পারফরম্যান্সে কোনো ক্ষতি ছাড়াই ম্যাপিং প্রক্রিয়াকে দ্রুততর এবং কার্যকরী করে তোলে।


Content added By

MapStruct এর মাধ্যমে Collection এবং Array Mapping করা

84
84

MapStruct একটি Java annotation processor ভিত্তিক টুল যা ডোমেইন অবজেক্টের মধ্যে ম্যাপিং করার জন্য ব্যবহৃত হয়। এর প্রধান সুবিধা হল এটি compile-time কোড জেনারেশন করে, ফলে পারফরম্যান্সে কোনো প্রভাব পড়ে না। এক্ষেত্রে, MapStruct কে কাস্টম মডেল ম্যাপিং, কাস্টম টাইপ কনভার্সন, এবং Collection (List, Set) এবং Array ম্যাপিং এর জন্য ব্যবহার করা যেতে পারে। এই টিউটোরিয়ালে, আমরা দেখব কিভাবে MapStruct ব্যবহার করে Collection (List, Set) এবং Array ম্যাপিং করা যায়।


১. Collection এবং Array Mapping এর ধারণা

MapStruct এর মাধ্যমে আপনি সাধারণ Java Collections যেমন List, Set, এবং Array ম্যাপ করতে পারবেন। আপনি যখন এক ধরনের অবজেক্টের Collection বা Array থেকে অন্য ধরনের Collection বা Array এ ডেটা ম্যাপ করবেন, তখন MapStruct প্রতিটি এলিমেন্টের জন্য ম্যাপিং কনভার্সন সঠিকভাবে পরিচালনা করবে।

MapStruct সাধারণত List, Set, Array ইত্যাদির উপাদানগুলির মধ্যে ম্যাপিং করতে পারে এবং এই উপাদানগুলির জন্য মাপিং ফাংশন তৈরি করতে পারে।


২. MapStruct দিয়ে Collection Mapping (List, Set)

Collection যেমন List বা Set এর মধ্যে ম্যাপিং করতে, MapStruct আপনাকে সহজেই একটি ফাংশন তৈরি করতে সাহায্য করে, যা এক ধরনের Collection কে অন্য ধরনের Collection তে কনভার্ট করবে।

উদাহরণ:

ধরা যাক, আপনার একটি Employee ক্লাস এবং একটি EmployeeDTO ক্লাস রয়েছে এবং আপনি এই দুটি ক্লাসের List কে ম্যাপ করতে চান।

Employee.java (Domain Object)
public class Employee {
    private String name;
    private int age;

    // Getters and Setters
}
EmployeeDTO.java (DTO)
public class EmployeeDTO {
    private String name;
    private int age;

    // Getters and Setters
}
EmployeeMapper.java (MapStruct Mapper)
import org.mapstruct.Mapper;
import java.util.List;

@Mapper
public interface EmployeeMapper {
    // Mapping a List of Employee to List of EmployeeDTO
    List<EmployeeDTO> employeesToEmployeeDTOs(List<Employee> employees);
}

এখানে, employeesToEmployeeDTOs মেথডটি Employee এর একটি List কে EmployeeDTO এর একটি List তে ম্যাপ করছে।

Main.java (Usage Example)
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Employee employee1 = new Employee();
        employee1.setName("John");
        employee1.setAge(30);

        Employee employee2 = new Employee();
        employee2.setName("Jane");
        employee2.setAge(25);

        List<Employee> employees = Arrays.asList(employee1, employee2);

        // Mapping using MapStruct
        EmployeeMapper employeeMapper = Mappers.getMapper(EmployeeMapper.class);
        List<EmployeeDTO> employeeDTOs = employeeMapper.employeesToEmployeeDTOs(employees);

        for (EmployeeDTO dto : employeeDTOs) {
            System.out.println("Name: " + dto.getName() + ", Age: " + dto.getAge());
        }
    }
}

এখানে, MapStruct ব্যবহার করে List কে List তে ম্যাপ করা হচ্ছে।


৩. MapStruct দিয়ে Set Mapping

Set এর ক্ষেত্রেও ম্যাপিং একইভাবে করা যায়, তবে Set সাধারণত অর্ডারহীন (unordered) হয়ে থাকে, তাই এতে কোনো বিশেষ অর্ডার অনুসরণ করা হয় না।

উদাহরণ:

import org.mapstruct.Mapper;
import java.util.Set;

@Mapper
public interface EmployeeMapper {
    // Mapping a Set of Employee to Set of EmployeeDTO
    Set<EmployeeDTO> employeesToEmployeeDTOs(Set<Employee> employees);
}

এখানে, employeesToEmployeeDTOs মেথডটি Employee এর একটি Set কে EmployeeDTO এর একটি Set তে ম্যাপ করছে।


৪. MapStruct দিয়ে Array Mapping

আপনি যখন Array ম্যাপ করবেন, তখন MapStruct নিজেই উপাদানগুলির মধ্যে ম্যাপিং পরিচালনা করবে।

উদাহরণ:

import org.mapstruct.Mapper;

@Mapper
public interface EmployeeMapper {
    // Mapping an array of Employee to array of EmployeeDTO
    EmployeeDTO[] employeesToEmployeeDTOs(Employee[] employees);
}

এখানে, employeesToEmployeeDTOs মেথডটি Employee এর একটি Array কে EmployeeDTO এর একটি Array তে ম্যাপ করছে।


৫. Nested Collection Mapping

যখন আপনার Collection বা Array তে Nested Objects (যেমন List of Lists বা Set of Sets) থাকে, তখন MapStruct এই Nested Objects এর মধ্যে ম্যাপিং করতে সহায়তা করে।

উদাহরণ:

import org.mapstruct.Mapper;
import java.util.List;

@Mapper
public interface EmployeeMapper {
    // Mapping a List of Employees to a List of EmployeeDTOs
    List<EmployeeDTO> employeesToEmployeeDTOs(List<Employee> employees);

    // Mapping a List of Lists (Nested Collection) of Employees to a List of Lists of EmployeeDTOs
    List<List<EmployeeDTO>> employeesToEmployeeDTOsNested(List<List<Employee>> employees);
}

এখানে, প্রথম মেথডটি List কে List তে ম্যাপ করছে এবং দ্বিতীয় মেথডটি List<List> কে List<List> তে ম্যাপ করছে।


৬. Advanced Mapping with MapStruct

MapStruct আপনাকে আরও উন্নত ম্যাপিং কনফিগারেশন করতে সহায়তা করে। এর মধ্যে রয়েছে:

  • Null-safe Mapping: MapStruct null চেক করতে পারে এবং আপনি ডিফল্ট মান সেট করতে পারেন।
  • Custom Mapping: আপনি যদি কিছু কাস্টম লজিক প্রয়োগ করতে চান, তবে আপনি custom methods ব্যবহার করতে পারেন।

উদাহরণ: Null-safe Mapping

@Mapper
public interface EmployeeMapper {
    @Mapping(target = "name", source = "fullName", defaultValue = "Unknown")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);
}

এখানে, যদি Employee অবজেক্টের fullName ফিল্ডটি null থাকে, তবে defaultValue = "Unknown" দ্বারা একটি ডিফল্ট মান সেট করা হবে।


সারাংশ

MapStruct ব্যবহার করে আপনি Collection (List, Set) এবং Array এর মধ্যে ডেটা ম্যাপিং করতে পারেন। এটি সহজে List থেকে List এবং Set থেকে Set তে ম্যাপিং করতে সহায়তা করে। এছাড়াও, MapStruct আপনাকে Nested Collection ম্যাপিং এবং Null-safe Mapping এর মতো অতিরিক্ত বৈশিষ্ট্য প্রদান করে, যা ম্যাপিং প্রক্রিয়াকে আরও উন্নত এবং কার্যকরী করে তোলে।


Content added By

উদাহরণ সহ Collections এবং Arrays Mapping

143
143

MapStruct একটি শক্তিশালী Java annotation processor যা ডেটা ট্রান্সফার অবজেক্ট (DTO) এবং ডোমেইন অবজেক্টগুলির মধ্যে ম্যাপিং সহজ করে। Collections এবং Arrays এর ম্যাপিং MapStruct এর গুরুত্বপূর্ণ ফিচারগুলোর মধ্যে একটি। এটি কিভাবে List, Set, এবং Array এর মধ্যে ম্যাপিং কার্যকরীভাবে করতে হয়, সেই সম্পর্কে আলোচনা করা হবে।


১. MapStruct এর মাধ্যমে Collections এবং Arrays Mapping এর ধারণা

MapStruct এর মাধ্যমে Collections (List, Set) এবং Arrays এর মধ্যে ম্যাপিং করতে হলে, এটি অটোমেটিকভাবে Collection Type অথবা Array Type এর মান ম্যাপ করে, যেহেতু MapStruct Iterable বা Array এর ডেটাকে হ্যান্ডেল করতে সক্ষম।

  • Collection Mapping: MapStruct লিস্ট বা সেটের মধ্যে থাকা অবজেক্টগুলির প্রতি একটি ম্যাপিং মেথড প্রযোজ্য করে। যেমন, একটি List থেকে List এ ম্যাপিং।
  • Array Mapping: একইভাবে, Arrays এর মধ্যে থাকা অবজেক্টগুলোর ম্যাপিংও করতে পারে।

MapStruct স্বয়ংক্রিয়ভাবে Collections এবং Arrays এর প্রতি ইনডিভিজুয়াল ম্যাপিং মেথড চালায়, যাতে প্রত্যেক উপাদান সঠিকভাবে ম্যাপ হয়।


২. Collections Mapping উদাহরণ

ধরা যাক, আমাদের কাছে একটি Employee ক্লাস এবং একটি EmployeeDTO ক্লাস রয়েছে, এবং আমাদের একটি List এ ম্যাপিং করতে হবে।

Employee.java (Domain Object)

public class Employee {
    private String name;
    private int age;

    // Getters and Setters
}

EmployeeDTO.java (DTO)

public class EmployeeDTO {
    private String name;
    private int age;

    // Getters and Setters
}

EmployeeMapper.java (Mapper Interface)

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;

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

    // Mapping a single Employee to EmployeeDTO
    EmployeeDTO employeeToEmployeeDTO(Employee employee);

    // Mapping List of Employee to List of EmployeeDTO
    List<EmployeeDTO> employeesToEmployeeDTOs(List<Employee> employees);
}

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

Main.java (Usage Example)

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Create a list of Employee objects
        List<Employee> employees = Arrays.asList(
                new Employee("John", 30),
                new Employee("Jane", 25)
        );

        // Map to List of EmployeeDTO
        List<EmployeeDTO> employeeDTOs = EmployeeMapper.INSTANCE.employeesToEmployeeDTOs(employees);

        // Print the EmployeeDTO list
        employeeDTOs.forEach(dto -> System.out.println("Name: " + dto.getName() + ", Age: " + dto.getAge()));
    }
}

Output:

Name: John, Age: 30
Name: Jane, Age: 25

এখানে, List থেকে List এ ম্যাপিং সম্পন্ন হয়েছে।


৩. Set Mapping উদাহরণ

এখন, ধরুন আমাদের একটি Set এর মধ্যে Employee অবজেক্ট এবং আমরা সেটি Set এ ম্যাপ করতে চাই। MapStruct একইভাবে Set এর মধ্যে অবজেক্টগুলির ম্যাপিং করতে পারে।

EmployeeMapper.java (Set Mapping)

import java.util.Set;

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

    // Mapping Set of Employee to Set of EmployeeDTO
    Set<EmployeeDTO> employeesToEmployeeDTOs(Set<Employee> employees);
}

Main.java (Usage Example for Set)

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        // Create a set of Employee objects
        Set<Employee> employees = new HashSet<>();
        employees.add(new Employee("John", 30));
        employees.add(new Employee("Jane", 25));

        // Map to Set of EmployeeDTO
        Set<EmployeeDTO> employeeDTOs = EmployeeMapper.INSTANCE.employeesToEmployeeDTOs(employees);

        // Print the EmployeeDTO set
        employeeDTOs.forEach(dto -> System.out.println("Name: " + dto.getName() + ", Age: " + dto.getAge()));
    }
}

Output:

Name: John, Age: 30
Name: Jane, Age: 25

এখানে, Set থেকে Set এ ম্যাপিং হয়েছে।


৪. Array Mapping উদাহরণ

MapStruct Arrays এর মধ্যে থাকা অবজেক্টেরও ম্যাপিং করতে সক্ষম। ধরুন, আমাদের একটি Employee[] (Array) রয়েছে এবং সেটি EmployeeDTO[] এ ম্যাপ করতে চাই।

EmployeeMapper.java (Array Mapping)

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

    // Mapping Employee array to EmployeeDTO array
    EmployeeDTO[] employeesToEmployeeDTOs(Employee[] employees);
}

Main.java (Usage Example for Arrays)

public class Main {
    public static void main(String[] args) {
        // Create an array of Employee objects
        Employee[] employees = {
            new Employee("John", 30),
            new Employee("Jane", 25)
        };

        // Map to EmployeeDTO array
        EmployeeDTO[] employeeDTOs = EmployeeMapper.INSTANCE.employeesToEmployeeDTOs(employees);

        // Print the EmployeeDTO array
        for (EmployeeDTO dto : employeeDTOs) {
            System.out.println("Name: " + dto.getName() + ", Age: " + dto.getAge());
        }
    }
}

Output:

Name: John, Age: 30
Name: Jane, Age: 25

এখানে, Employee[] থেকে EmployeeDTO[] এ ম্যাপিং করা হয়েছে।


৫. Collections এবং Arrays Mapping এর সুবিধা

  • Automatic Mapping: MapStruct collections এবং arrays ম্যাপিংয়ের জন্য অটোমেটিক কোড জেনারেশন করে, তাই আপনি ম্যানুয়ালি কোড লিখতে হয় না।
  • Efficient Mapping: MapStruct এর মাধ্যমে পারফরম্যান্সে কোন পার্থক্য ছাড়াই বিভিন্ন সাইজের collections এবং arrays এর মধ্যে ম্যাপিং করা যায়।
  • Custom Mapping Support: প্রয়োজনে আপনি কাস্টম ম্যাপিং ফাংশন তৈরি করে বিশেষ প্রয়োজনে collections এবং arrays এর মধ্যে ডেটা ট্রান্সফার করতে পারেন।

সারাংশ

MapStruct এর মাধ্যমে Collections (List, Set) এবং Arrays এর মধ্যে ম্যাপিং অত্যন্ত সহজ এবং কার্যকরী। এটি compile-time এ কোড জেনারেট করে এবং প্রতিটি উপাদানকে সঠিকভাবে ম্যাপ করে। এছাড়া, MapStruct ব্যবহার করে collections এবং arrays এর মধ্যে List, Set, এবং Array টাইপের ডেটা ম্যাপিং করা যায়। এর মাধ্যমে, আপনি খুব দ্রুত এবং পারফরম্যান্সে কোনো সমস্যা ছাড়াই ডেটা ট্রান্সফার করতে পারবেন।


Content added By
Promotion