Java Technologies উদাহরণ সহ Custom Mapping এবং Conversion গাইড ও নোট

278

MapStruct একটি শক্তিশালী টুল যা Java Beans (POJOs) এর মধ্যে অটোমেটিক ম্যাপিং এবং কাস্টম কনভার্শন পরিচালনা করতে সক্ষম। কখনও কখনও, ডিফল্ট ম্যাপিং থেকে বেশি কাস্টমাইজেশন প্রয়োজন হয়, যেমন বিশেষ ধরনের ডেটা কনভার্সন বা ভিন্ন ফরম্যাটে ডেটা এক্সচেঞ্জ। এই ক্ষেত্রে MapStruct আপনাকে Custom Mapping এবং Conversion এর সুযোগ প্রদান করে।

এখানে, আমরা MapStruct ব্যবহার করে String, Date, এবং Custom Object এর মধ্যে কাস্টম কনভার্শন কিভাবে করা যায় তা উদাহরণের মাধ্যমে দেখাবো।


১. MapStruct Custom Mapping এবং Conversion Overview

Custom Mapping এর প্রয়োজনীয়তা তখনই হয় যখন আপনি ডিফল্ট ম্যাপিং থেকে আলাদা কোনো ট্রান্সফরমেশন বা কনভার্শন করতে চান। MapStruct আপনাকে কাস্টম Mapping Methods এবং Conversion Methods তৈরি করার সুবিধা দেয়, যা বিশেষভাবে String, Date, এবং Custom Object এর মধ্যে ডেটা কনভার্ট করতে ব্যবহৃত হয়।


২. String এবং Date এর মধ্যে Conversion

ধরা যাক, আপনি একটি String এবং Date ফরম্যাটের মধ্যে কনভার্শন করতে চান, যেমন একটি String ডেটাতে রূপান্তর বা একটি Date অবজেক্টকে একটি নির্দিষ্ট স্ট্রিং ফরম্যাটে রূপান্তর করা।

উদাহরণ: String এবং Date এর মধ্যে Conversion

Employee.java (Domain Object)
import java.util.Date;

public class Employee {
    private String name;
    private Date joiningDate;

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

    // Getters and Setters
}

Custom Mapping with MapStruct

এখন, আমরা একটি কাস্টম ম্যাপিং মেথড তৈরি করব যা Date থেকে String এবং String থেকে Date কনভার্ট করবে।

EmployeeMapper.java (Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.text.SimpleDateFormat;
import java.util.Date;

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

    // Mapping from Employee to EmployeeDTO
    @Mapping(source = "joiningDate", target = "joiningDateString", dateFormat = "dd-MM-yyyy")
    EmployeeDTO employeeToEmployeeDTO(Employee employee);

    // Custom Mapping from String to Date
    default Date stringToDate(String dateStr) {
        try {
            return new SimpleDateFormat("dd-MM-yyyy").parse(dateStr);
        } catch (Exception e) {
            return null;
        }
    }

    // Custom Mapping from Date to String
    default String dateToString(Date date) {
        return new SimpleDateFormat("dd-MM-yyyy").format(date);
    }
}

এখানে:

  • @Mapping অ্যানোটেশন ব্যবহার করা হয়েছে, যাতে Date অবজেক্টটি String ফরম্যাটে কনভার্ট করা হয় এবং এটি joiningDateString ফিল্ডে ম্যাপ করা হয়।
  • কাস্টম stringToDate এবং dateToString মেথড তৈরি করা হয়েছে, যেগুলি স্ট্রিং এবং ডেটার মধ্যে কনভার্সন করবে।

Main.java (Usage Example)

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setJoiningDate(new Date());

        // Mapping
        EmployeeDTO employeeDTO = EmployeeMapper.INSTANCE.employeeToEmployeeDTO(employee);
        System.out.println("Name: " + employeeDTO.getName());
        System.out.println("Joining Date: " + employeeDTO.getJoiningDateString());
    }
}

এখানে, employeeToEmployeeDTO মেথডটি Date অবজেক্টকে String এ কনভার্ট করবে এবং সঠিক ফরম্যাটে প্রিন্ট করবে।


৩. Custom Object Conversion

কখনও কখনও আপনাকে একাধিক কাস্টম অবজেক্টের মধ্যে ম্যাপিং করতে হতে পারে, যেমন একটি কাস্টম ক্লাসের ফিল্ড থেকে অন্য একটি কাস্টম ক্লাসের ফিল্ডে মান ম্যাপ করা।

উদাহরণ: Custom Object Conversion

Address.java (Domain Object)
public class Address {
    private String street;
    private String city;

    // Getters and Setters
}
AddressDTO.java (DTO)
public class AddressDTO {
    private String streetName;
    private String cityName;

    // Getters and Setters
}

Custom Object Mapping with MapStruct

এখন, আমরা একটি কাস্টম ম্যাপিং মেথড তৈরি করব যা Address থেকে AddressDTO তে কাস্টম ফিল্ড ম্যাপিং করবে।

AddressMapper.java (Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

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

    @Mapping(source = "street", target = "streetName")
    @Mapping(source = "city", target = "cityName")
    AddressDTO addressToAddressDTO(Address address);
}

এখানে, street ফিল্ডটি streetName ফিল্ডে এবং city ফিল্ডটি cityName ফিল্ডে ম্যাপ করা হয়েছে।

Main.java (Usage Example)

public class Main {
    public static void main(String[] args) {
        Address address = new Address();
        address.setStreet("123 Main St");
        address.setCity("New York");

        // Mapping
        AddressDTO addressDTO = AddressMapper.INSTANCE.addressToAddressDTO(address);
        System.out.println("Street: " + addressDTO.getStreetName());
        System.out.println("City: " + addressDTO.getCityName());
    }
}

এখানে, addressToAddressDTO মেথডটি Address অবজেক্টের ফিল্ডগুলোকে AddressDTO তে কাস্টম ভাবে ম্যাপ করবে।


৪. MapStruct এর মাধ্যমে Custom Conversion এর সুবিধা

  1. Flexible Mapping: কাস্টম ম্যাপিংয়ের মাধ্যমে আপনি যেকোনো ধরনের কাস্টম লজিক প্রয়োগ করতে পারেন, যেমন ডেটা ট্রান্সফরমেশন, এনাম কনভার্শন বা স্পেশাল ফরম্যাটিং।
  2. Code Generation: MapStruct compile-time এ কোড জেনারেট করে, তাই এর কোনো রানটাইম পারফরম্যান্স ইস্যু নেই।
  3. Error Handling: আপনি কাস্টম কনভার্সন মেথডে null চেক এবং অন্যান্য ত্রুটি সমাধান যুক্ত করতে পারেন।

সারাংশ

MapStruct এর মাধ্যমে আপনি String, Date, এবং Custom Object এর মধ্যে কাস্টম কনভার্সন এবং ম্যাপিং সহজে করতে পারেন। কাস্টম ম্যাপিংয়ের মাধ্যমে আপনি আপনার প্রোজেক্টে নির্দিষ্ট ডেটা ট্রান্সফরমেশন এবং কাস্টম লজিক প্রয়োগ করতে পারবেন। MapStruct এর কোড জেনারেশন ক্ষমতা, টাইপ সেফটি, এবং পারফরম্যান্স নিশ্চিতকরণ এর প্রধান সুবিধা, যা ম্যাপিং প্রক্রিয়াকে দ্রুত এবং কার্যকরী করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...