Bean Map Creation হল একটি প্রক্রিয়া যেখানে Java Bean এর প্রপার্টি (ফিল্ড) এবং তাদের মান Map (যেমন HashMap) এ রূপান্তর করা হয়। এটি বিশেষত তখন প্রয়োজনীয় হয় যখন আপনি Java Bean এর ডেটাকে ডেটাবেস, ফাইল অথবা অন্যান্য ডেটা স্টোরেজ সিস্টেমে মানের মাধ্যমে পাঠাতে চান, যেখানে Map ব্যবহার করা সহজ। Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে আপনি সহজে Java Bean এর প্রপার্টি কে Map-এ রূপান্তর করতে পারেন।
এটি সাধারণত Java Bean কে Map<String, Object> রূপে রূপান্তরিত করার জন্য ব্যবহৃত হয়, যেখানে key হল প্রপার্টির নাম এবং value হল সেই প্রপার্টির মান।
1. BeanUtils.describe() মেথড ব্যবহার করে Bean থেকে Map তৈরি করা
BeanUtils.describe() মেথডটি Java Bean এর প্রপার্টি এবং তাদের মানের একটি Map তৈরি করতে ব্যবহৃত হয়। এটি Map এর মধ্যে Bean-এর সকল getter মেথডের মাধ্যমে প্রপার্টি নাম এবং মান সংরক্ষণ করে।
উদাহরণ:
ধরা যাক, আমাদের একটি Person Bean রয়েছে এবং আমরা এটি Map-এ রূপান্তর করতে চাই।
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
// Create a Person object
Person person = new Person("Alice", 28);
// Convert the Person object to Map using BeanUtils
Map<String, String> personMap = BeanUtils.describe(person);
// Print the Map content
for (Map.Entry<String, String> entry : personMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}এখানে, BeanUtils.describe() মেথড ব্যবহার করা হয়েছে Person Bean-এর প্রপার্টি (যেমন name এবং age) এবং তাদের মানকে Map-এ রূপান্তর করার জন্য।
আউটপুট:
name: Alice
age: 28এখানে, Map<String, String> ফর্ম্যাটে Java Bean-এর প্রপার্টি নাম এবং মান দেখানো হয়েছে। লক্ষ্য করুন যে age প্রপার্টি একটি String ফরম্যাটে কনভার্ট হয়েছে, কারণ BeanUtils.describe() সব মান String হিসেবে কনভার্ট করে।
2. BeanUtils.populate() এবং Map থেকে Bean-এ ডেটা পপুলেট করা
এছাড়া, আপনি Map থেকে Java Bean-এ ডেটা পপুলেট করতে BeanUtils.populate() মেথড ব্যবহার করতে পারেন। এটি Map এর ডেটাকে Java Bean এর প্রপার্টিতে রূপান্তর করে।
উদাহরণ:
এখানে, আমরা প্রথমে Map তৈরি করব এবং তারপর তা Bean-এ পপুলেট করব।
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
// Create a Map with values
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "Bob");
personMap.put("age", "35");
// Create a Person object to be populated
Person person = new Person();
// Populate the Person object with data from the Map
BeanUtils.populate(person, personMap);
// Print the populated properties
System.out.println("Name: " + person.getName()); // Output: Bob
System.out.println("Age: " + person.getAge()); // Output: 35
}
}
class Person {
private String name;
private int age;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}এখানে, BeanUtils.populate() মেথড ব্যবহার করে Map এর মান Person Bean-এর name এবং age প্রপার্টিতে পপুলেট করা হয়েছে।
আউটপুট:
Name: Bob
Age: 353. Map থেকে Bean পপুলেট করার জন্য Custom Type Conversion (কাস্টম টাইপ কনভার্সন)
আপনি যদি Map থেকে Bean পপুলেট করার সময় টাইপ কনভার্সন করতে চান (যেমন String থেকে int কনভার্ট করা), তবে PropertyUtils বা ConvertUtils ব্যবহার করে কাস্টম টাইপ কনভার্সন করতে পারেন।
উদাহরণ:
ধরা যাক, Map থেকে String টাইপের মানকে int টাইপে কনভার্ট করতে হবে।
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.IntegerConverter;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
// Register a custom converter for Integer
ConvertUtils.register(new IntegerConverter(null), Integer.class);
// Create a Map with string values
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "Charlie");
personMap.put("age", "40");
// Create a Person object to be populated
Person person = new Person();
// Populate the Person object with data from the Map
BeanUtils.populate(person, personMap);
// Print the populated properties
System.out.println("Name: " + person.getName()); // Output: Charlie
System.out.println("Age: " + person.getAge()); // Output: 40 (as Integer)
}
}
class Person {
private String name;
private int age;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}এখানে, IntegerConverter ব্যবহার করা হয়েছে যাতে age প্রপার্টি String থেকে Integer-এ কনভার্ট হতে পারে।
আউটপুট:
Name: Charlie
Age: 404. Map থেকে Bean তৈরি করার সুবিধা
- Map থেকে Java Bean-এ ডেটা পপুলেট করা সহজ এবং দ্রুত। এটি বিভিন্ন ডেটা সোর্স (যেমন, ফর্ম ডেটা, ডেটাবেস রেকর্ড, JSON) থেকে ডেটা ইম্পোর্ট বা এক্সপোর্ট করার জন্য ব্যবহৃত হয়।
- Map<String, Object> ফর্ম্যাটে ডেটা সংগ্রহ করলে ডেটা ম্যানিপুলেশন সহজ হয়ে যায় এবং তা Bean এর মধ্যে প্রপার্টিতে রূপান্তরিত করা যায়।
- Custom Conversion: কাস্টম টাইপ কনভার্সন এবং ম্যানিপুলেশন সহজে করা যায়, যেমন String থেকে Integer বা অন্য ধরনের কনভার্ট করা।
সারাংশ
- Bean Map Creation হল Java Bean এর প্রপার্টি এবং তাদের মান Map-এ রূপান্তর করা।
- BeanUtils.describe() মেথড ব্যবহার করে Java Bean-এর প্রপার্টি Map-এ রূপান্তর করা যায়।
- BeanUtils.populate() মেথড ব্যবহার করে Map থেকে Java Bean পপুলেট করা হয়।
- Custom Type Conversion ব্যবহার করে আপনি Map থেকে Bean পপুলেট করার সময় কাস্টম কনভার্সন লজিক প্রয়োগ করতে পারেন।
এটি ডেটা ট্রান্সফারের জন্য কার্যকরী এবং বিভিন্ন ডেটা সোর্সের মধ্যে Java Beans এর ম্যানিপুলেশন সহজ করে তোলে।
Java Bean থেকে Map তৈরি করার জন্য Apache Commons BeanUtils লাইব্রেরি ব্যবহার করা যেতে পারে। BeanUtils-এর describe() মেথড ব্যবহার করে আপনি একটি Java Bean-এর প্রপার্টি এবং তাদের মানকে একটি Map-এ কনভার্ট করতে পারেন। এই পদ্ধতিটি বিশেষত তখন কাজে আসে যখন আপনাকে একটি Bean-এর ডেটা Map আকারে প্রক্রিয়া করতে হয়।
1. BeanUtils.describe() মেথড ব্যবহার করা
describe() মেথডটি একটি Java Bean-এর প্রপার্টি নাম এবং মানের একটি Map রিটার্ন করে। এখানে Map-এর key হবে Bean-এর প্রপার্টির নাম এবং value হবে সেই প্রপার্টির মান।
describe() মেথডের সেন্ট্যাক্স:
public static Map<String, String> describe(Object bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException;bean: Bean অবজেক্ট যা থেকে ডেটা কপি করা হবে।- Map<String, String>: প্রতিটি Bean প্রপার্টি একটি string key-value পেয়ার হিসাবে Map-এ থাকবে।
2. Bean থেকে Map তৈরি করার উদাহরণ
উদাহরণ ১: সাধারণ Bean থেকে Map তৈরি করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
public class BeanToMapExample {
public static void main(String[] args) {
try {
// Create a Person object (Bean)
Person person = new Person("John", 30);
// Convert Bean to Map using BeanUtils.describe()
Map<String, String> personMap = BeanUtils.describe(person);
// Output the Map
System.out.println("Bean to Map:");
for (Map.Entry<String, String> entry : personMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে
describe()মেথড ব্যবহার করেPersonBean থেকে একটি Map তৈরি করা হয়েছে। - Map এর key হবে প্রপার্টির নাম (যেমন
"name"এবং"age") এবং value হবে সেই প্রপার্টির মান (যেমন"John"এবং30)।
আউটপুট:
Bean to Map:
name: John
age: 303. নোট:
- Map-এ ডেটা ভ্যালু:
describe()মেথডে সমস্ত প্রপার্টির মান String হিসেবে থাকবে। সুতরাং, আপনি যদিInteger,Double, বা অন্য কোন ডেটা টাইপের প্রপার্টি চান, তাহলে আপনি প্রয়োজনীয় কাস্টম কনভার্সন করতে পারেন। - নেস্টেড প্রপার্টি:
describe()মেথড শুধুমাত্র সরাসরি Bean-এর প্রপার্টি রিটার্ন করে, নেস্টেড প্রপার্টির জন্য আপনাকে আলাদা কাস্টমাইজেশন করতে হবে।
4. Map থেকে Bean তৈরি করা
এছাড়া, আপনি যদি একটি Map থেকে Bean তৈরি করতে চান, তখন BeanUtils.populate() মেথড ব্যবহার করতে পারেন। এটি Map বা অন্যান্য ডেটা সোর্স থেকে Bean-এ ডেটা populate করতে সহায়তা করে।
উদাহরণ: Map থেকে Bean তৈরি করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class MapToBeanExample {
public static void main(String[] args) {
try {
// Create a Map with key-value pairs
Map<String, String> dataMap = new HashMap<>();
dataMap.put("name", "Alice");
dataMap.put("age", "25");
// Create a Person object (Bean)
Person person = new Person();
// Populate Bean using BeanUtils.populate()
BeanUtils.populate(person, dataMap);
// Output the populated Bean properties
System.out.println("Map to Bean:");
System.out.println("Name: " + person.getName()); // Output: Alice
System.out.println("Age: " + person.getAge()); // Output: 25
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor
public Person() {}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে একটি
Mapতৈরি করা হয়েছে, যেখানেkeyBean-এর প্রপার্টি নাম এবংvalueপ্রপার্টির মান। BeanUtils.populate()ব্যবহার করে Map থেকেPersonBean-এ ডেটা populate করা হয়েছে।
আউটপুট:
Map to Bean:
Name: Alice
Age: 255. Bean থেকে Map এ Nested Properties কপি করা
describe() মেথড শুধুমাত্র সরাসরি প্রপার্টি কপি করে, তাই nested properties কপি করার জন্য আপনাকে কিছু কাস্টম লজিক ব্যবহার করতে হতে পারে। সাধারণত, nested properties ম্যানিপুলেট করতে BeanUtilsBean বা PropertyUtils ব্যবহার করা হয়।
সারাংশ
BeanUtils.describe()মেথড ব্যবহার করে Java Bean থেকে একটি Map তৈরি করা যায়, যেখানে Bean-এর প্রপার্টির নাম key এবং মান value হিসেবে Map-এ রাখা হয়।- Map থেকে Bean তৈরি করার জন্য
BeanUtils.populate()মেথড ব্যবহার করা হয়, যা Map-এর key-value পেয়ার অনুযায়ী Bean-এর প্রপার্টি populate করতে সাহায্য করে। describe()মেথড কেবল সরাসরি প্রপার্টি কপি করে, nested প্রপার্টি ম্যানিপুলেট করতে আলাদা কাস্টমাইজেশন প্রয়োজন হতে পারে।
Apache Commons BeanUtils এবং PropertyUtils লাইব্রেরিগুলোর describe() মেথড ব্যবহার করে আপনি সহজেই একটি Bean-এর সমস্ত প্রপার্টি এবং তাদের মানগুলোকে একটি Map-এ পরিণত করতে পারেন। এই মেথডগুলো ডায়নামিক অ্যাপ্লিকেশন তৈরি করার জন্য কার্যকর, যেখানে Bean-এর প্রপার্টি সম্পর্কে runtime-এ তথ্য সংগ্রহ প্রয়োজন হয়।
1. BeanUtils.describe()
বর্ণনা:
BeanUtils.describe()একটি Bean-এর সকল প্রপার্টি এবং তাদের মানকে একটি Map<String, String>-এ রূপান্তর করে।- এটি getter মেথডগুলোর মাধ্যমে প্রপার্টিগুলোর মান সংগ্রহ করে এবং মানগুলো সবসময় String ফরম্যাটে থাকে।
- এটি টাইপ কনভার্সন করে, তাই প্রপার্টিগুলো String হিসেবে রিটার্ন হয়।
সিনট্যাক্স:
Map<String, String> BeanUtils.describe(Object bean) throws Exception;উদাহরণ: BeanUtils.describe()
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
public class BeanUtilsDescribeExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person("John", 30);
// Describe the Person object as a Map
Map<String, String> properties = BeanUtils.describe(person);
// Print the properties
for (Map.Entry<String, String> entry : properties.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}আউটপুট:
class: Person
name: John
age: 30ব্যাখ্যা:
classপ্রপার্টি Bean-এর ক্লাসের নাম দেখায়।nameএবংageপ্রপার্টি Bean-এর গেটার মেথড থেকে প্রাপ্ত মান।
2. PropertyUtils.describe()
বর্ণনা:
PropertyUtils.describe()একটি Bean-এর সকল প্রপার্টি এবং তাদের মানকে একটি Map<String, Object>-এ রূপান্তর করে।- এটি টাইপ কনভার্সন করে না। প্রপার্টিগুলোর আসল টাইপ বজায় থাকে।
- এটি getter মেথডের মাধ্যমে প্রপার্টির মান সংগ্রহ করে।
সিনট্যাক্স:
Map<String, Object> PropertyUtils.describe(Object bean) throws Exception;উদাহরণ: PropertyUtils.describe()
import org.apache.commons.beanutils.PropertyUtils;
import java.util.Map;
public class PropertyUtilsDescribeExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person("John", 30);
// Describe the Person object as a Map
Map<String, Object> properties = PropertyUtils.describe(person);
// Print the properties
for (Map.Entry<String, Object> entry : properties.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}আউটপুট:
class: Person
name: John
age: 30ব্যাখ্যা:
classপ্রপার্টি Bean-এর ক্লাসের নাম দেখায়।- প্রপার্টিগুলোর মান তাদের আসল টাইপ বজায় রাখে (যেমন,
ageএকটিIntegerথাকবে)।
BeanUtils.describe() বনাম PropertyUtils.describe()
| বৈশিষ্ট্য | BeanUtils.describe() | PropertyUtils.describe() |
|---|---|---|
| আউটপুট টাইপ | Map<String, String> | Map<String, Object> |
| টাইপ কনভার্সন | প্রপার্টিগুলো String ফরম্যাটে রূপান্তরিত হয়। | প্রপার্টিগুলোর আসল টাইপ বজায় থাকে। |
| ব্যবহার ক্ষেত্র | যখন প্রপার্টিগুলো String ফরম্যাটে প্রয়োজন। | টাইপ কনভার্সন ছাড়া প্রপার্টি মান প্রয়োজন। |
| Nested Properties | Nested প্রপার্টিগুলোর মান সরাসরি এক্সেস করা যায় না। | Nested প্রপার্টিগুলোর মান সরাসরি এক্সেস করা যায় না। |
| উদ্দেশ্য | সাধারণত ডেটা ডিবাগিং বা লগিং এর জন্য ব্যবহৃত। | টাইপ কনভার্সন ছাড়াই ডেটা প্রসেসিং। |
Nested Properties এর সীমাবদ্ধতা
- BeanUtils.describe() বা PropertyUtils.describe() সরাসরি Nested Properties হ্যান্ডল করে না। তবে আপনি Nested Properties ম্যানুয়ালি এক্সেস করতে পারেন:
উদাহরণ:
String street = (String) PropertyUtils.getNestedProperty(person, "address.street");সারাংশ
BeanUtils.describe()এবংPropertyUtils.describe()একটি Bean-এর প্রপার্টিগুলোর তালিকা তৈরি করতে ব্যবহার করা হয়।BeanUtils.describe()প্রপার্টিগুলোর মান সবসময়Stringহিসেবে প্রদান করে, যেখানেPropertyUtils.describe()আসল টাইপ বজায় রাখে।- Bean-এর ডায়নামিক ডেটা ম্যানিপুলেশনে এই মেথডগুলো কার্যকরী। টাইপ কনভার্সনের প্রয়োজন অনুযায়ী এই দুটি মেথডের একটি বেছে নিন।
Java Bean এর প্রপার্টিগুলিকে Map এ কনভার্ট করা একটি সাধারণ কাজ যা অনেক সময় প্রয়োজন হয়, যেমন ফর্ম ডেটা, JSON ডেটা ইত্যাদি সংগ্রহ ও ট্রান্সফারের জন্য। Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে একটি Java Bean এর প্রপার্টিগুলি একটি Map-এ কনভার্ট করা খুবই সহজ।
BeanUtils.populate() এবং BeanUtils.describe() মেথড
BeanUtils.describe():- এই মেথড ব্যবহার করে একটি Bean এর প্রপার্টি গুলিকে একটি Map<String, String>-এ কনভার্ট করা যায়।
- এটি একটি
Mapরিটার্ন করে, যেখানে প্রপার্টির নাম (key) এবং মান (value) স্ট্রিং আকারে থাকে।
BeanUtils.populate():- এটি একটি Map এর ডেটা দিয়ে Bean populate করতে ব্যবহৃত হয়।
Map এ Bean এর প্রপার্টিগুলি কনভার্ট করার উদাহরণ:
উদাহরণ: BeanUtils.describe() ব্যবহার করে Bean কে Map এ কনভার্ট করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.HashMap;
public class BeanToMapExample {
public static void main(String[] args) {
try {
// Create a new Person object (Bean)
Person person = new Person("John", 25);
// Convert Bean to Map
Map<String, String> personMap = BeanUtils.describe(person);
// Output the Map
for (Map.Entry<String, String> entry : personMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor, getter and setter methods
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
BeanUtils.describe(person)মেথডটিPersonBean এর প্রপার্টিগুলি একটিMap<String, String>এ কনভার্ট করে। এখানে, key হল প্রপার্টির নাম (যেমন"name","age") এবং value হল তাদের মান (যেমন"John","25").Mapআউটপুট হবে:name: John age: 25
BeanUtils.populate() ব্যবহার করে Map থেকে Bean Populate করা
এই উদাহরণে আমরা দেখব কিভাবে একটি Map এর ডেটা দিয়ে Java Bean populate করা যায়:
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.HashMap;
public class MapToBeanExample {
public static void main(String[] args) {
try {
// Create a Map with property names and values
Map<String, String> personMap = new HashMap<>();
personMap.put("name", "Alice");
personMap.put("age", "28");
// Create a new Person object (Bean)
Person person = new Person();
// Populate the Person object using the Map
BeanUtils.populate(person, personMap);
// Output the populated Bean properties
System.out.println("Name: " + person.getName()); // Output: Alice
System.out.println("Age: " + person.getAge()); // Output: 28
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor, getter and setter methods
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- একটি Map তৈরি করা হয়েছে, যেখানে key হচ্ছে Bean এর প্রপার্টির নাম এবং value হচ্ছে সেই প্রপার্টির মান।
BeanUtils.populate()মেথড ব্যবহার করে Map এর ডেটা দিয়ে Person Bean populate করা হয়েছে।- পরে
person.getName()এবংperson.getAge()ব্যবহার করে কপি করা ডেটা প্রদর্শন করা হয়েছে।
Nested Properties Map থেকে Bean Populate করা
ধরা যাক, আপনি একটি Person Bean এর মধ্যে একটি Address Bean রাখতে চান। এর মাধ্যমে দেখানো হবে কিভাবে নেস্টেড প্রপার্টির ডেটা populate করতে হয়।
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.HashMap;
public class NestedBeanToMapExample {
public static void main(String[] args) {
try {
// Create a Map with nested Address data
Map<String, String> addressMap = new HashMap<>();
addressMap.put("street", "Street 456");
addressMap.put("city", "City B");
Map<String, Object> personMap = new HashMap<>();
personMap.put("name", "John");
personMap.put("age", "32");
personMap.put("address", addressMap); // Nested Map
// Create a Person object (Bean)
Person person = new Person();
// Populate Person object using the Map
BeanUtils.populate(person, personMap);
// Output the populated Bean properties
System.out.println("Name: " + person.getName()); // Output: John
System.out.println("Age: " + person.getAge()); // Output: 32
System.out.println("Street: " + person.getAddress().getStreet()); // Output: Street 456
System.out.println("City: " + person.getAddress().getCity()); // Output: City B
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
private Address address;
public Person() {}
// Getter and setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
class Address {
private String street;
private String city;
public Address() {}
// Getter and setter methods
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}ব্যাখ্যা:
- Nested Map তৈরি করা হয়েছে যেখানে Address Bean এর প্রপার্টি রয়েছে (যেমন
"street","city"). BeanUtils.populate()মেথড ব্যবহার করে Person Bean এবং তার নেস্টেড Address Bean populate করা হয়েছে।- পরে, Person এবং Address Bean এর প্রপার্টি গুলি অ্যাক্সেস করা হয়েছে।
সারাংশ:
BeanUtils.describe()এবংBeanUtils.populate()মেথডের মাধ্যমে Java Bean এর প্রপার্টিগুলি Map থেকে কনভার্ট করা এবং Map থেকে Bean populate করা যায়।describe()মেথড Bean এর প্রপার্টি গুলি Map-এ কনভার্ট করে, এবংpopulate()মেথড Map থেকে Java Bean এর প্রপার্টি populate করতে ব্যবহৃত হয়।- Nested properties সাপোর্ট করে, যা Bean এর মধ্যে অন্য Bean থাকা সত্ত্বেও কাস্টম ডেটা populate করতে সক্ষম।
Map থেকে Bean তৈরি করা এবং Data Transfer করার প্রক্রিয়া Java Beans এবং Map (যেমন HashMap) এর মধ্যে ডেটা স্থানান্তরের জন্য একটি সাধারণ এবং কার্যকরী উপায়। এটি সাধারণত Data Transfer Objects (DTOs) ব্যবহার করা হয়, যেখানে ডেটা Map এর মধ্যে থাকে এবং সেটি Bean এ কনভার্ট করা হয়। BeanUtils বা PropertyUtils লাইব্রেরি ব্যবহার করে সহজেই এই ডেটা স্থানান্তর করা যেতে পারে।
১. Map থেকে Bean তৈরি করা
Map থেকে Bean তৈরি করা মানে হলো, Map এর key-value পেয়ারগুলো Java Bean এর প্রপার্টি হিসেবে কপি করা। এর জন্য Apache Commons BeanUtils লাইব্রেরি অত্যন্ত উপকারী, যেটি populate() মেথড ব্যবহার করে Map এর ডেটা Bean এ পপুলেট করতে সাহায্য করে।
উদাহরণ: Map থেকে Bean তৈরি করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class MapToBeanExample {
public static void main(String[] args) {
try {
// Create a Map with dynamic properties
Map<String, String> properties = new HashMap<>();
properties.put("name", "John Doe");
properties.put("age", "30");
// Create a Person object
Person person = new Person();
// Populate the Person object with properties from the map
BeanUtils.populate(person, properties);
// Output the populated properties
System.out.println("Name: " + person.getName()); // Output: John Doe
System.out.println("Age: " + person.getAge()); // Output: 30
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Getter and setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে একটি Map তৈরি করা হয়েছে, যেখানে name এবং age প্রপার্টির জন্য ডেটা রয়েছে।
- BeanUtils.populate() মেথড ব্যবহার করে, Map এর ডেটা
PersonBean এর প্রপার্টিতে কপি করা হয়েছে।
এটি runtime-এ dynamic data mapping এর জন্য ব্যবহার করা যেতে পারে, যেমন ফর্ম ইনপুট থেকে ডেটা গ্রহন এবং তা DTO বা Entity Bean এ পপুলেট করা।
২. Data Transfer between Map and Bean
Data Transfer এর মাধ্যমে আপনি বিভিন্ন লেয়ারে ডেটা স্থানান্তর করতে পারেন। এক্ষেত্রে, Map এবং Bean এর মধ্যে ডেটা স্থানান্তরের জন্য BeanUtils বা PropertyUtils লাইব্রেরি ব্যবহৃত হয়। DTO (Data Transfer Object) সাধারণত এই প্রক্রিয়ার অংশ হিসেবে ব্যবহৃত হয়, যেখানে ডেটা Map এ থাকে এবং সেটা DTO বা Bean তে কনভার্ট করা হয়।
উদাহরণ: Map থেকে Bean (DTO) তে Data Transfer
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
import java.util.HashMap;
public class DataTransferExample {
public static void main(String[] args) {
try {
// Create a Map with dynamic data
Map<String, String> map = new HashMap<>();
map.put("firstName", "Alice");
map.put("lastName", "Smith");
map.put("age", "25");
// Create a DTO object
PersonDTO personDTO = new PersonDTO();
// Transfer data from Map to PersonDTO using BeanUtils
BeanUtils.populate(personDTO, map);
// Output the transferred data
System.out.println("First Name: " + personDTO.getFirstName()); // Output: Alice
System.out.println("Last Name: " + personDTO.getLastName()); // Output: Smith
System.out.println("Age: " + personDTO.getAge()); // Output: 25
} catch (Exception e) {
e.printStackTrace();
}
}
}
class PersonDTO {
private String firstName;
private String lastName;
private int age;
// Getter and setter methods
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে Map তে ডেটা রয়েছে যা PersonDTO তে কনভার্ট করা হয়েছে। BeanUtils.populate() মেথড ব্যবহার করে Map এর ডেটা PersonDTO তে পপুলেট করা হয়েছে।
- ডেটা DTO তে সঠিকভাবে স্থানান্তরিত হয়েছে, এবং আমরা
PersonDTOএর গেটার মেথড ব্যবহার করে তা আউটপুট করেছি।
এটি একটি সাধারণ data transfer প্যাটার্ন যেখানে DTO ক্লাস ডেটা স্থানান্তরের জন্য ব্যবহৃত হয়।
৩. Map থেকে Bean এবং Bean থেকে Map এ Data Transfer
যখন Map এবং Bean এর মধ্যে ডেটা স্থানান্তর করতে হয়, তখন আপনি BeanUtilsBean এর describe() এবং populate() মেথড ব্যবহার করতে পারেন। describe() মেথড ব্যবহার করে Bean এর প্রপার্টি Map তে কনভার্ট করা যায়, এবং populate() মেথড ব্যবহার করে Map এর ডেটা Bean তে পপুলেট করা যায়।
উদাহরণ: Bean থেকে Map এ Data Transfer
import org.apache.commons.beanutils.BeanUtilsBean;
import java.util.Map;
import java.util.HashMap;
public class BeanToMapExample {
public static void main(String[] args) {
try {
// Create a Person object (Bean)
PersonDTO personDTO = new PersonDTO();
personDTO.setFirstName("Bob");
personDTO.setLastName("Johnson");
personDTO.setAge(40);
// Convert the Bean to a Map using BeanUtilsBean
Map<String, String> map = BeanUtilsBean.getInstance().describe(personDTO);
// Output the Map
System.out.println("Map from Bean: " + map);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class PersonDTO {
private String firstName;
private String lastName;
private int age;
// Getter and setter methods
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- BeanUtilsBean.getInstance().describe() মেথড ব্যবহার করে PersonDTO Bean কে Map তে কনভার্ট করা হয়েছে। এতে Bean এর প্রপার্টি key-value পেয়ার আকারে Map এ রূপান্তরিত হয়।
- এই ধরনের ডেটা কনভার্সন DTO এবং Map এর মধ্যে সহজে ডেটা স্থানান্তর করতে সহায়ক।
৪. Real-world Use Case: Database and Service Layer Integration
যখন ডেটাবেস থেকে Entity অবজেক্টগুলির ডেটা নিয়ে DTO বা Data Transfer Object তে স্থানান্তর করতে হয়, তখন Map এবং Bean এর মধ্যে ডেটা স্থানান্তর একটি সাধারণ প্র্যাকটিস। Map তে ডেটা আসে (যেমন ResultSet), এবং সেটি Bean তে পপুলেট করা হয়। পরে সেই Bean থেকে DTO তে ডেটা স্থানান্তর করা হয়।
এটি সাধারণত JPA বা Hibernate ব্যবহার করে ডেটাবেস থেকে ডেটা পাঠানোর সময় এবং Spring Service Layer তে ডেটা প্রসেস করার জন্য ব্যবহৃত হয়।
সারাংশ
- Map থেকে Bean তৈরি করা এবং Data Transfer করার মাধ্যমে DTO এবং Bean এর মধ্যে ডেটা স্থানান্তর সহজ করা হয়।
- BeanUtils.populate() এবং BeanUtils.describe() ব্যবহার করে Map এবং Bean এর মধ্যে ডেটা স্থানান্তর করা সম্ভব।
- এটি Web Services, Database বা Service Layer এ ব্যবহৃত হয়, যেখানে ডেটা Map ফরম্যাটে আসে এবং সেটি Java Beans তে কনভার্ট করা হয়।
এই পদ্ধতি প্রোগ্রামিংয়ের অনেক ক্ষেত্রে ব্যবহার হয়, যেমন **RESTful Web
Services**, ORM mapping, form data handling, এবং DTO conversion।
Read more