MapStruct একটি শক্তিশালী এবং পারফর্ম্যান্স ফ্রেন্ডলি Java লাইব্রেরি যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ম্যাপিং করতে সহায়তা করে। Lombok একটি জনপ্রিয় Java লাইব্রেরি যা স্বয়ংক্রিয়ভাবে getter, setter, equals, hashcode, toString, এবং অন্যান্য মেথড তৈরি করতে সাহায্য করে, ফলে কোড কমপ্লেক্সিটি কমে এবং উন্নয়ন কার্যক্রম দ্রুত হয়।
MapStruct এবং Lombok একত্রে ব্যবহার করা যেতে পারে, যাতে আপনি সহজে এবং দ্রুত ডেটা ম্যাপিং সম্পন্ন করতে পারেন, এবং একই সাথে Lombok এর সুবিধাগুলি ব্যবহার করে আরও কম কোড লিখতে পারেন।
এই গাইডে, আমরা MapStruct এবং Lombok এর ইন্টিগ্রেশন এবং এর প্রয়োগ দেখব।
১. Lombok এবং MapStruct এর Integration এর প্রয়োজনীয়তা
Lombok এবং MapStruct একত্রে ব্যবহার করলে, আপনি ডোমেইন অবজেক্টের মধ্যে ডেটা ম্যাপিং করার সময় আরো সোজা এবং পরিষ্কার কোড পেতে পারেন। Lombok আপনার কোডে অপ্রয়োজনীয় getter, setter, constructor ইত্যাদি তৈরি করতে সাহায্য করে, আর MapStruct দ্রুত এবং সঠিকভাবে ম্যাপিং কোড জেনারেট করে।
এখানে আমরা দেখবো কিভাবে Lombok এবং MapStruct একত্রে কাজ করে।
২. Maven Dependency Configuration for Lombok and MapStruct
প্রথমে, আপনি Maven এর pom.xml ফাইলে Lombok এবং MapStruct এর প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<!-- MapStruct Dependency -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
<!-- MapStruct Processor for compile-time code generation -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
<scope>provided</scope>
</dependency>
<!-- Lombok Dependency -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
</dependencies>
এখানে, MapStruct এবং Lombok এর জন্য যথাক্রমে ডিপেনডেন্সি যোগ করা হয়েছে। MapStruct Processor কোড জেনারেট করতে ব্যবহৃত হবে, এবং Lombok এর প্রয়োজনীয় অ্যাট্রিবিউট (যেমন @Getter, @Setter) যুক্ত করতে সাহায্য করবে।
৩. Lombok এবং MapStruct এর উদাহরণ
ধরা যাক, আমাদের দুটি ক্লাস রয়েছে: Person এবং PersonDTO। আমরা Lombok এর সাহায্যে getter, setter এবং constructor জেনারেট করব এবং MapStruct এর মাধ্যমে তাদের মধ্যে ডেটা ম্যাপিং করব।
৩.১ Person.java (Domain Object with Lombok)
import lombok.Data;
@Data // Lombok annotation to generate getter, setter, equals, hashcode, and toString methods
public class Person {
private String firstName;
private String lastName;
private int age;
}
এখানে, @Data অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা স্বয়ংক্রিয়ভাবে getter, setter, toString(), equals(), এবং hashCode() মেথডগুলো জেনারেট করে।
৩.২ PersonDTO.java (DTO with Lombok)
import lombok.Data;
@Data // Lombok annotation to generate getter, setter, equals, hashcode, and toString methods
public class PersonDTO {
private String firstName;
private String lastName;
private int age;
}
এখানে, আবার @Data ব্যবহার করা হয়েছে যা DTO ক্লাসে একই ফিচার যুক্ত করেছে।
৩.৩ PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper(componentModel = "spring") // This enables Spring integration
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
// Mapping method
PersonDTO personToPersonDTO(Person person);
}
এখানে, @Mapper অ্যানোটেশন ব্যবহার করা হয়েছে, যা PersonMapper ইন্টারফেসটিকে একটি MapStruct Mapper হিসেবে চিহ্নিত করেছে এবং personToPersonDTO মেথডে Person থেকে PersonDTO এ ম্যাপিং হবে।
৩.৪ Main.java (Usage Example)
import org.springframework.beans.factory.annotation.Autowired;
public class Main {
@Autowired
private static PersonMapper personMapper;
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
person.setAge(30);
// Mapping
PersonDTO personDTO = personMapper.personToPersonDTO(person);
System.out.println(personDTO.getFirstName()); // Output: John
System.out.println(personDTO.getLastName()); // Output: Doe
System.out.println(personDTO.getAge()); // Output: 30
}
}
এখানে, MapStruct দ্বারা ম্যাপিং সম্পন্ন করা হয়েছে এবং Lombok এর সাহায্যে getter এবং setter মেথডগুলো স্বয়ংক্রিয়ভাবে জেনারেট করা হয়েছে।
৪. Spring Framework এ Lombok এবং MapStruct Integration
যদি আপনি Spring Framework বা Spring Boot ব্যবহার করেন, তবে MapStruct এবং Lombok খুব সহজে ইন্টিগ্রেট করা যায়। Spring এর সাথে MapStruct ব্যবহার করার জন্য @Mapper(componentModel = "spring") কনফিগারেশন ব্যবহার করতে হবে, যা MapStruct কে Spring Bean হিসেবে কনফিগার করে।
উদাহরণ:
@Mapper(componentModel = "spring")
public interface PersonMapper {
PersonDTO personToPersonDTO(Person person);
}
এখানে, componentModel = "spring" ব্যবহার করে MapStruct এর মেপিং লজিককে Spring Bean হিসেবে কনফিগার করা হয়েছে। এতে @Autowired দিয়ে Spring তে PersonMapper ইন্টারফেসটি ইনজেক্ট করতে পারবেন।
৫. MapStruct এবং Lombok এর পারফরম্যান্স
Lombok এবং MapStruct একত্রে ব্যবহৃত হলে কোডের পরিমাণ অনেক কমে যায় এবং এটি কমপ্লেক্সিটি হ্রাস করতে সাহায্য করে। Lombok স্বয়ংক্রিয়ভাবে Getter, Setter, এবং অন্যান্য মেথড জেনারেট করার কারণে ম্যানুয়ালি এই মেথডগুলো লেখার প্রয়োজন পড়ে না, এবং MapStruct compile-time কোড জেনারেশন করে দ্রুত ম্যাপিং করতে সাহায্য করে। এর ফলে পারফরম্যান্সের দিক থেকে এটি খুবই সুবিধাজনক হয়।
সারাংশ
MapStruct এবং Lombok একত্রে ব্যবহৃত হলে, আপনি কম কোড লেখার মাধ্যমে কার্যকরী এবং দ্রুত ডেটা ট্রান্সফার অবজেক্ট (DTO) ম্যাপিং করতে পারেন। Lombok স্বয়ংক্রিয়ভাবে getter, setter, এবং অন্যান্য মেথড জেনারেট করে, এবং MapStruct compile-time কোড জেনারেশন করে, যা রানটাইমে পারফরম্যান্স বৃদ্ধিতে সাহায্য করে। Spring প্রোজেক্টের সাথে ইন্টিগ্রেট করতে হলে @Mapper(componentModel = "spring") ব্যবহার করতে হয়, যাতে MapStruct Spring Bean হিসেবে কাজ করতে পারে।
Read more