MapStruct একটি Java annotation processor যা ডোমেইন অবজেক্ট থেকে ডেটা ট্রান্সফার অবজেক্ট (DTO) অথবা অন্য অবজেক্টে ম্যাপিং সহজ এবং কার্যকরী করে তোলে। Mapping Ignore এবং Default Values ব্যবহারের মাধ্যমে আপনি কিছু বিশেষ ক্ষেত্রে ডেটা ম্যাপিং পরিচালনা করতে পারেন। এই দুটি ফিচার ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডগুলি ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন বা ডিফল্ট মান সেট করতে পারেন।
এই টিউটোরিয়ালে, আমরা MapStruct এর মাধ্যমে Mapping Ignore এবং Default Values কিভাবে ব্যবহার করতে হয় তা আলোচনা করব এবং উদাহরণ সহ দেখাবো।
১. Mapping Ignore
Mapping Ignore ব্যবহার করে আপনি একটি ফিল্ড বা প্রপার্টি ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন, যদি তা ম্যাপিংয়ের জন্য প্রয়োজনীয় না হয়। এতে কিছু ফিল্ড গুলি ম্যাপিংয়ের সময় অনুপস্থিত বা অগোছালো থাকা সত্ত্বেও, আপনার ম্যাপিং প্রক্রিয়া সঠিকভাবে চলতে থাকবে।
@Mapping(ignore = true) ব্যবহার
MapStruct এ @Mapping(ignore = true) অ্যানোটেশন ব্যবহার করে আপনি একটি প্রপার্টিকে ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন।
উদাহরণ: Mapping Ignore
ধরা যাক, আপনার কাছে দুটি ক্লাস রয়েছে — Employee এবং EmployeeDTO।
Employee.java (Domain Object):
public class Employee {
private String name;
private int age;
private String department;
// Getters and Setters
}
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
private String department;
// Getters and Setters
}
এখন, যদি আপনি department ফিল্ডটি EmployeeDTO তে ম্যাপ করতে না চান, তাহলে @Mapping(ignore = true) ব্যবহার করতে হবে।
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", ignore = true) // Ignore department field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি ম্যাপিং প্রক্রিয়া থেকে বাদ দেয়া হয়েছে।
২. Default Values
Default Values ব্যবহার করে আপনি ম্যাপিংয়ের সময় কোনো প্রপার্টি যদি null থাকে, তবে তাকে একটি ডিফল্ট মান অ্যাসাইন করতে পারেন। এর মাধ্যমে, আপনি ডিফল্ট মান নির্ধারণ করতে পারেন যা কোনো ফিল্ডের জন্য কোনো ভ্যালু না আসলে ব্যবহৃত হবে।
@Mapping(target = "field", defaultValue = "value") ব্যবহার
MapStruct এ আপনি defaultValue প্রপার্টি ব্যবহার করে ডিফল্ট ভ্যালু নির্ধারণ করতে পারেন।
উদাহরণ: Default Values
ধরা যাক, আপনার EmployeeDTO তে department ফিল্ডের জন্য ডিফল্ট মান দেয়া হচ্ছে।
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;
private String department = "Unknown"; // Default value
// Getters and Setters
}
এখন, আপনি department ফিল্ডটির জন্য MapStruct এ ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে যদি কোনো মান না থাকে, তবে সেটি "Unknown" থাকবে।
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", defaultValue = "Unknown") // Default value for department
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, যদি department ফিল্ডের মান null থাকে, তবে সেটি "Unknown" হবে।
৩. Combining Ignore and Default Values
আপনি @Mapping(ignore = true) এবং defaultValue একসাথে ব্যবহার করতে পারেন, যেখানে কিছু ফিল্ডের মান আপনি বাদ দিতে চান এবং কিছু ফিল্ডের জন্য ডিফল্ট মান সেট করতে চান।
উদাহরণ: Combining Ignore and Default Values
Employee.java (Domain Object):
public class Employee {
private String name;
private int age;
private String department;
// Getters and Setters
}
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
private String department = "Unknown"; // Default value
// Getters and Setters
}
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", ignore = true) // Ignore department field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি ignore করা হয়েছে, কিন্তু EmployeeDTO তে department ফিল্ডের ডিফল্ট মান "Unknown" রয়েছে। এর ফলে, department ফিল্ডে কোনো মান না থাকলে "Unknown" মান ব্যবহার হবে।
সারাংশ
MapStruct এর Mapping Ignore এবং Default Values ফিচার আপনাকে ম্যাপিং প্রক্রিয়াকে আরও নমনীয় এবং কাস্টমাইজড করতে সহায়তা করে। Mapping Ignore ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট ফিল্ডগুলি ম্যাপিং থেকে বাদ দিতে পারেন, এবং Default Values ব্যবহারের মাধ্যমে আপনি কোনো ফিল্ডের জন্য ডিফল্ট মান সেট করতে পারেন, যদি ফিল্ডটি null থাকে। এই দুটি ফিচার একসাথে ব্যবহার করলে ম্যাপিং প্রক্রিয়া আরও কার্যকরী এবং কাস্টমাইজড হয়ে ওঠে।
MapStruct ব্যবহার করে ডোমেইন অবজেক্ট এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং করা হয়। কখনও কখনও, আপনি চাইবেন কিছু ফিল্ড ম্যাপিং থেকে বাদ দিতে, যেগুলি ডেটা ট্রান্সফার করার প্রয়োজন নেই বা কিছু নির্দিষ্ট পরিস্থিতিতে প্রয়োজনীয় নয়। MapStruct এই কাজের জন্য @Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট প্রদান করে, যা আপনাকে নির্দিষ্ট ফিল্ডগুলো ম্যাপিং থেকে বাদ দিতে সহায়তা করে।
১. @Mapping এর ignore অ্যাট্রিবিউট
@Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি একটি নির্দিষ্ট ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। যখন আপনি একটি ফিল্ড ম্যাপিং এ অন্তর্ভুক্ত করতে চান না, তখন আপনি ignore = true সেট করতে পারেন।
২. @Mapping এর ignore ব্যবহার করার উদাহরণ
ধরা যাক, আমাদের একটি Employee ডোমেইন ক্লাস এবং একটি EmployeeDTO (Data Transfer Object) ক্লাস রয়েছে। আমাদের প্রোজেক্টে কিছু ক্ষেত্র এমন থাকতে পারে যা ম্যাপিং এর জন্য প্রয়োজনীয় নয়। সেক্ষেত্রে ignore অ্যাট্রিবিউট ব্যবহার করে সেই ফিল্ড বাদ দেওয়া যেতে পারে।
উদাহরণ: Field Ignore করা
Employee.java (Domain Object):
public class Employee {
private String name;
private String department;
private int age;
private String password; // We don't need to map this field to DTO
// Getters and Setters
}
EmployeeDTO.java (DTO Object):
public class EmployeeDTO {
private String name;
private String department;
private int age;
// Getters and Setters
}
এখানে, Employee ক্লাসের password ফিল্ডটি EmployeeDTO ক্লাসে ম্যাপ করার প্রয়োজন নেই। আমরা MapStruct এর @Mapping অ্যানোটেশন ব্যবহার করে এটি বাদ দিতে পারি।
EmployeeMapper.java (Mapper Interface):
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true) // Ignoring the 'password' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, @Mapping অ্যানোটেশন ব্যবহার করে আমরা password ফিল্ডটি Employee থেকে EmployeeDTO তে ম্যাপ হতে বাদ দিয়েছি। ignore = true প্রপার্টি নিশ্চিত করে যে, password ফিল্ডটি ম্যাপিং প্রক্রিয়ায় অন্তর্ভুক্ত হবে না।
৩. @Mapping এর ignore ব্যবহারকারী ক্ষেত্রে
- Sensitive Data: অনেক সময় কিছু সেন্সিটিভ ডেটা (যেমন পাসওয়ার্ড) DTO তে না পাঠানোর সিদ্ধান্ত নেওয়া হয়। এমন ক্ষেত্রে,
ignore = trueব্যবহার করে সেই ফিল্ড বাদ দেওয়া হয়। - Redundant Fields: কিছু ক্ষেত্রে, ডেটা ট্রান্সফার অবজেক্টে কিছু অতিরিক্ত বা অপ্রয়োজনীয় ফিল্ড থাকতে পারে, যেগুলিকে আপনি ম্যাপিং থেকে বাদ দিতে পারেন।
- Conditional Mapping: কখনও কখনও, বিশেষ শর্তের ভিত্তিতে ফিল্ড ম্যাপিং বাদ দিতে হতে পারে। MapStruct এই ধরনের অবস্থায় কাস্টম কনভার্সন ব্যবহার করতে সহায়তা করে।
৪. Multiple Fields Ignore
এটি সম্ভব যে একাধিক ফিল্ড আপনি ম্যাপিং থেকে বাদ দিতে চান। আপনি @Mapping অ্যানোটেশন একাধিক বার ব্যবহার করতে পারেন বা একই সময় একাধিক ফিল্ডের জন্য ignore = true ব্যবহার করতে পারেন।
উদাহরণ: একাধিক ফিল্ড Ignore করা
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true)
@Mapping(source = "age", target = "age", ignore = true) // Ignoring the 'age' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, password এবং age ফিল্ড দুটি ম্যাপিং প্রক্রিয়া থেকে বাদ দেয়া হয়েছে।
৫. Ignore Appended Fields
একই সময় আপনি কিছু অ্যাপেন্ডেড ফিল্ডকে (যেগুলি DTO-তে অতিরিক্ত) বাদ দিতে পারেন, যেমন অতিরিক্ত মেটা ডেটা বা অপ্রয়োজনীয় তথ্য।
উদাহরণ: Ignore Appended Fields
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "department", target = "department", ignore = true)
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি EmployeeDTO তে ম্যাপ হতে বাদ দেয়া হয়েছে, যদি EmployeeDTO তে এই তথ্যটি প্রয়োজন না হয়।
সারাংশ
MapStruct এর @Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি ফিল্ডগুলোকে সহজেই ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। এটি বিশেষত সেন্সিটিভ ডেটা যেমন পাসওয়ার্ড, অথবা অপ্রয়োজনীয় ফিল্ডের জন্য কার্যকরী। ignore = true প্রপার্টি ব্যবহার করার মাধ্যমে, আপনি একটি বা একাধিক ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারবেন, যার ফলে ডেটা ট্রান্সফার অবজেক্ট (DTO) কেবলমাত্র প্রয়োজনীয় ডেটা ধারণ করবে এবং আপনার অ্যাপ্লিকেশন আরও নিরাপদ এবং দক্ষ হবে।
MapStruct একটি শক্তিশালী Java মডেল মেপিং টুল, যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপিং সহজে করতে সাহায্য করে। কখনও কখনও, আপনার ডোমেইন অবজেক্ট বা DTO এর কিছু ফিল্ডে ডিফল্ট ভ্যালু সেট করার প্রয়োজন হতে পারে। MapStruct এই কাজটি সহজেই সম্পাদন করতে পারে, যেখানে আপনি একটি কাস্টম মেথড ব্যবহার করে বা @Mapping অ্যানোটেশন দিয়ে ডিফল্ট ভ্যালু সেট করতে পারেন।
এখানে আমরা MapStruct এর মাধ্যমে কিভাবে ডিফল্ট ভ্যালু সেট করা যায় তার উদাহরণ দেখব।
১. MapStruct এ Default Value সেট করার ধারণা
MapStruct ব্যবহারে, আপনি যখন একটি অবজেক্টের এক ফিল্ড থেকে অন্য ফিল্ডে ডেটা ম্যাপ করেন, তখন যদি কখনও উল্লিখিত মান না থাকে (যেমন null), আপনি একটি ডিফল্ট ভ্যালু সেট করতে পারেন। এটি কিছু ক্ষেত্রের জন্য যেমন ফাঁকা ফিল্ড বা অপর্যাপ্ত ডেটা থাকলে অটো-ফিল্ল করা যেতে পারে।
@Mapping অ্যানোটেশন ব্যবহার করে Default Value সেট করা
MapStruct আপনাকে @Mapping অ্যানোটেশন ব্যবহার করে ম্যাপিংয়ের সময় ডিফল্ট ভ্যালু সেট করার সুযোগ দেয়। যদি ম্যাপিংয়ের উৎস অবজেক্টের কোনো ফিল্ড null হয়, তবে আপনি একটি ডিফল্ট মান প্রদান করতে পারেন।
২. Example: MapStruct Default Value Setting
ধরা যাক, আমাদের একটি Person ডোমেইন অবজেক্ট এবং একটি PersonDTO রয়েছে। Person অবজেক্টের একটি ফিল্ড age রয়েছে, এবং যদি এটি null থাকে, তবে আমরা PersonDTO তে ডিফল্ট মান ৩০ সেট করতে চাই।
Person.java (Domain Object)
public class Person {
private String name;
private Integer age;
// Getters and Setters
}
PersonDTO.java (DTO)
public class PersonDTO {
private String name;
private int age; // Default value to be set if null
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
@Mapper
public interface PersonMapper {
@Mapping(source = "age", target = "age", defaultValue = "30") // Setting default value for age
PersonDTO personToPersonDTO(Person person);
}
এখানে:
- @Mapping অ্যানোটেশন ব্যবহার করা হয়েছে এবং defaultValue প্রপার্টি দিয়ে আমরা
ageফিল্ডের জন্য ৩০ ডিফল্ট মান সেট করেছি। - যদি
Personঅবজেক্টের age ফিল্ডের মান null থাকে, তবে এটি PersonDTO তে 30 সেট হবে।
৩. Custom Method ব্যবহার করে Default Value
MapStruct এর মাধ্যমে আপনি যদি আরো কাস্টম লজিক প্রয়োগ করতে চান, তবে আপনি একটি কাস্টম মেথড ব্যবহার করতে পারেন যা ডিফল্ট ভ্যালু সেট করবে।
উদাহরণ: কাস্টম মেথড ব্যবহার করে Default Value সেট করা
এখানে একটি কাস্টম মেথড তৈরি করা হয়েছে যা age ফিল্ডে ডিফল্ট মান সেট করবে যদি null হয়।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", source = "age", qualifiedByName = "setDefaultAge")
PersonDTO personToPersonDTO(Person person);
// Custom method to set default value
default int setDefaultAge(Integer age) {
return age == null ? 30 : age; // If age is null, set default value 30
}
}
এখানে:
- setDefaultAge মেথডে, আমরা কাস্টম লজিক প্রয়োগ করেছি যা
ageযদি null হয়, তবে ডিফল্ট ৩০ সেট করে।
৪. Enum Mapping এ Default Value Set করা
MapStruct ব্যবহার করে আপনি Enum ম্যাপিংয়ের ক্ষেত্রেও ডিফল্ট মান সেট করতে পারেন। এটি একটি সাধারণ কৌশল যেখানে Enum ভ্যালু গুলির মধ্যে একটি নির্দিষ্ট ভ্যালু যদি না থাকে, তবে ডিফল্ট মান ব্যবহার করা হয়।
Enum Example:
public enum Status {
ACTIVE,
INACTIVE
}
Person.java (Domain Object)
public class Person {
private String name;
private Status status;
// Getters and Setters
}
PersonDTO.java (DTO)
public class PersonDTO {
private String name;
private String status; // Default value for status to be set
// Getters and Setters
}
PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "status", source = "status", defaultValue = "ACTIVE") // Default value for status
PersonDTO personToPersonDTO(Person person);
}
এখানে, status ফিল্ডে defaultValue = "ACTIVE" ব্যবহার করা হয়েছে যাতে PersonDTO তে status যদি null থাকে, তবে ডিফল্ট হিসেবে "ACTIVE" সেট হবে।
৫. Default Value Set করার ক্ষেত্রে কিছু গুরুত্বপূর্ণ পয়েন্ট
- @Mapping with defaultValue: আপনি @Mapping অ্যানোটেশন ব্যবহার করে ডিফল্ট মান সরাসরি সেট করতে পারেন। এটি খুব সহজ এবং দ্রুত কাজ করে।
- Custom Methods: কাস্টম মেথড ব্যবহার করে আপনি ডিফল্ট মান এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে পারেন।
- Null Safety: MapStruct null safety নিশ্চিত করতে সহায়ক এবং ডিফল্ট মান সেট করা এক ধরনের নিরাপত্তা প্রদান করে যখন ডেটা মিসিং থাকে।
সারাংশ
MapStruct ব্যবহার করে আপনি আপনার ডোমেইন অবজেক্ট এবং DTO এর মধ্যে ডিফল্ট মান সেট করতে পারেন। এটি @Mapping অ্যানোটেশন বা কাস্টম মেথড ব্যবহার করে করা যায়। MapStruct ডিফল্ট ভ্যালু সেট করার মাধ্যমে আপনার কোডে কোনো অপর্যাপ্ত বা null ভ্যালু থাকলে তা সহজেই পূর্ণ করতে সহায়ক হয়। এতে কোডের কর্মক্ষমতা বৃদ্ধি পায় এবং এটি আরও কার্যকরীভাবে কাজ করে।
MapStruct হল একটি Java annotation processor ভিত্তিক মডেল ম্যাপিং টুল যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ট্রান্সফার করতে ব্যবহৃত হয়। MapStruct আপনাকে বিভিন্ন ম্যাপিং কাস্টমাইজেশন, যেমন Ignore এবং Default Value ব্যবহারের সুযোগ দেয়। এটি বিশেষত তখন ব্যবহারী হয় যখন আপনি কিছু ফিল্ড বা ভ্যালু ম্যাপিং করতে চান না বা ডিফল্ট মান প্রদান করতে চান।
এই টিউটোরিয়ালে আমরা MapStruct এর মাধ্যমে Ignore এবং Default Value এর ব্যবহার দেখব, যা আপনার ম্যাপিং প্রক্রিয়াকে আরও কাস্টমাইজড এবং কার্যকরী করতে সহায়তা করবে।
১. MapStruct এ Ignore ব্যবহার
কিছু ক্ষেত্রে, আপনি চাইবেন না যে একটি নির্দিষ্ট প্রপার্টি বা ফিল্ড ম্যাপিংয়ে অংশগ্রহণ করুক। তখন আপনি @Mapping অ্যানোটেশন ব্যবহার করে সেই ফিল্ডটিকে ignore করতে পারেন। এটি MapStruct কে নির্দেশ দেয় যে সে ওই ফিল্ডটি ম্যাপিং করবে না।
উদাহরণ: Ignore ব্যবহার
ধরা যাক, আমাদের দুটি ক্লাস Person এবং PersonDTO আছে এবং আমরা চাই age ফিল্ডটি DTO তে ম্যাপ না হোক।
Person.java:
public class Person {
private String name;
private int age;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
// Getters and Setters
}
এখন, age ফিল্ডটি PersonDTO তে না যাওয়ার জন্য আমরা @Mapping অ্যানোটেশন ব্যবহার করব।
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", ignore = true) // Ignore the 'age' field
PersonDTO personToPersonDTO(Person person);
}
এখানে, @Mapping(target = "age", ignore = true) ব্যবহার করে আমরা age ফিল্ডটি PersonDTO তে ম্যাপ হওয়া থেকে আটকাচ্ছি। ফলে, PersonDTO তে age ফিল্ডটি থাকবে না।
২. MapStruct এ Default Value ব্যবহার
কিছু ক্ষেত্রে আপনি চাইবেন যে যদি কোনো ভ্যালু null থাকে বা নির্দিষ্ট কোনো ফিল্ডের জন্য মান না থাকে, তখন একটি default value সেট করা হোক। MapStruct আপনাকে এই কাজটি করতে সাহায্য করে।
উদাহরণ: Default Value ব্যবহার
ধরা যাক, PersonDTO তে age ফিল্ডের জন্য যদি কোনো মান না থাকে, তবে আমরা এটি 0 দিয়ে ডিফল্ট করতে চাই।
Person.java:
public class Person {
private String name;
private Integer age; // Integer type to handle null
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
private int age; // Default value 0
// Getters and Setters
}
এখন, MapStruct এর মাধ্যমে আমরা age ফিল্ডের জন্য একটি ডিফল্ট মান দিতে পারি, যখন সেটি null থাকে।
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", defaultValue = "0") // Set default value for age
PersonDTO personToPersonDTO(Person person);
}
এখানে, @Mapping(target = "age", defaultValue = "0") ব্যবহার করে আমরা PersonDTO তে age ফিল্ডের জন্য ডিফল্ট মান 0 সেট করেছি। এর মানে হল যে যদি Person অবজেক্টের age null থাকে, তবে PersonDTO তে age এর মান 0 হবে।
৩. MapStruct এ Ignore এবং Default Value এর ব্যবহার
MapStruct ব্যবহার করার সময় Ignore এবং Default Value এর সাহায্যে আপনি আরো কাস্টম ম্যাপিং করতে পারেন। এটি এমন পরিস্থিতিতে কার্যকর যেখানে কিছু ফিল্ডকে ম্যাপিং থেকে বাদ দিতে হয় বা কোনো ফিল্ডের জন্য ডিফল্ট মান সেট করতে হয়।
উদাহরণ: Ignore এবং Default Value একসাথে ব্যবহার
ধরা যাক, আপনার PersonDTO তে কিছু ফিল্ডকে null বা অনুপস্থিত রাখতে চান এবং কিছু ফিল্ডে ডিফল্ট মান সেট করতে চান।
Person.java:
public class Person {
private String name;
private Integer age;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
private int age = 0; // Default value 0
// Getters and Setters
}
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", defaultValue = "0") // Default value for age
@Mapping(target = "name", ignore = true) // Ignore name field
PersonDTO personToPersonDTO(Person person);
}
এখানে:
nameফিল্ডটি PersonDTO তে ignore করা হয়েছে, অর্থাৎ PersonDTO তেnameফিল্ডটি ম্যাপ হবে না।ageফিল্ডটির জন্য defaultValue ব্যবহার করা হয়েছে, যদি Person অবজেক্টেagenull থাকে, তবে সেটি 0 হয়ে যাবে।
৪. MapStruct এ Ignore এবং Default Value এর সুবিধা
- Ignore ব্যবহার করে আপনি এমন ফিল্ডগুলো বাদ দিতে পারেন যেগুলো ম্যাপিংয়ে অন্তর্ভুক্ত করতে চান না।
- Default Value ব্যবহার করে আপনি ডিফল্ট মান সেট করতে পারেন, যা বিশেষত null চেক করতে সহায়ক।
- এই দুটি কৌশল ব্যবহারে আপনি আরও কাস্টমাইজড এবং নির্ভরযোগ্য ম্যাপিং প্রক্রিয়া তৈরি করতে পারেন।
সারাংশ
MapStruct এর মাধ্যমে Ignore এবং Default Value ব্যবহার করার মাধ্যমে আপনি সহজে কাস্টম ম্যাপিং করতে পারেন এবং আপনার কোডের কার্যকারিতা বাড়াতে পারেন। আপনি Ignore এর মাধ্যমে কিছু ফিল্ড বাদ দিতে পারেন এবং Default Value ব্যবহার করে ডিফল্ট মান সেট করতে পারেন, যা ডেটা ট্রান্সফার প্রক্রিয়া অনেক সহজ ও কার্যকরী করে তোলে। এটি বিশেষভাবে উপকারী যখন আপনি বিভিন্ন প্রকার ডোমেইন অবজেক্ট বা DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপ করতে চান।
Read more