Java Technologies MapStruct এর মাধ্যমে Collection এবং Array Mapping করা গাইড ও নোট

331

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
Promotion

Are you sure to start over?

Loading...