ORM (Object-Relational Mapping) হল একটি প্রযুক্তি যা অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং ভাষা (যেমন Java) এবং রিলেশনাল ডেটাবেসের মধ্যে ডেটা ম্যানিপুলেশন সম্পর্কিত সমস্যাগুলির সমাধান করে। ORM এর মাধ্যমে ডেভেলপাররা ডেটাবেস টেবিলগুলির সাথে কাজ করার জন্য অবজেক্টগুলো ব্যবহার করতে পারেন, যেখানে টেবিলের প্রতিটি রেকর্ড একটি অবজেক্ট হিসেবে দেখা হয়।
JPA (Java Persistence API) হল Java প্ল্যাটফর্মের একটি স্পেসিফিকেশন যা ORM প্রযুক্তির সাথে কাজ করার জন্য Java এ স্ট্যান্ডার্ড API প্রদান করে। JPA-এর মাধ্যমে Java অবজেক্ট এবং রিলেশনাল ডেটাবেসের মধ্যে সঞ্চালিত ডেটার মধ্যে স্বয়ংক্রিয় ম্যাপিং সম্ভব হয়।
ORM (Object-Relational Mapping) কি?
ORM হল একটি প্রোগ্রামিং কৌশল যার মাধ্যমে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এবং রিলেশনাল ডেটাবেসের মধ্যে ডেটা এক্সচেঞ্জ এবং সম্পর্ক স্থাপন সহজ হয়। ORM এর মাধ্যমে ডেভেলপাররা ডেটাবেস টেবিলের সাথে কাজ করার জন্য সাধারণত অবজেক্ট ব্যবহার করতে পারেন, এবং এটি ডেটাবেসের রেকর্ডগুলির সাথে সম্পর্কিত তথ্য অবজেক্টের আকারে ম্যানিপুলেট করতে সক্ষম করে।
ORM এর প্রধান কাজগুলি:
- ডেটাবেস টেবিল এবং অবজেক্টের মধ্যে সম্পর্ক স্থাপন:
- ORM একটি ডেটাবেস টেবিলকে একটি ক্লাসের সাথে সম্পর্কিত করে, এবং টেবিলের প্রতিটি রেকর্ডকে ক্লাসের একটি অবজেক্টে রূপান্তরিত করে।
- ডেটাবেস কুয়েরি ও ম্যানিপুলেশন সহজ করা:
- ORM ডেটাবেসে SQL কুয়েরি লেখার প্রয়োজন কমিয়ে দেয়। ডেভেলপাররা অবজেক্ট ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারেন এবং ORM এগুলিকে ডেটাবেস কুয়েরি তে রূপান্তর করে।
- কনভেনশন এবং কনফিগারেশন:
- ORM অনেক কনভেনশন এবং কনফিগারেশন প্রদান করে, যা ডেটাবেস এবং কোডের মধ্যে একটি স্বাভাবিক ম্যাপিং তৈরি করতে সহায়তা করে।
JPA (Java Persistence API) এর ভূমিকা
JPA হল Java এ ORM প্রযুক্তি ব্যবহার করার জন্য একটি স্পেসিফিকেশন। এটি অবজেক্ট এবং ডেটাবেসের মধ্যে সম্পর্ক স্থাপন এবং ডেটাবেস অপারেশনকে অবজেক্ট-ওরিয়েন্টেড ভাবে পরিচালনা করতে সাহায্য করে।
JPA ব্যবহার করে ডেভেলপাররা ডেটাবেসের সাথে কাজ করার জন্য Java অবজেক্ট ব্যবহার করতে পারেন, এবং JPA-র মাধ্যমে ORM কনসেপ্টের সুবিধা পাওয়া যায়।
JPA এর মাধ্যমে ORM এর মূল কাজগুলো করা হয়:
- Entity Mapping: ডেটাবেস টেবিল এবং Java অবজেক্টের মধ্যে সম্পর্ক তৈরি করা।
- Persistence Context: ডেটাবেসে অবজেক্ট গুলি সেভ (persist), আপডেট (merge), এবং লোড (find) করা।
- Query Language: JPA JPQL (Java Persistence Query Language) ব্যবহার করে ডেটাবেস কুয়েরি করা, যা SQL এর মতো হলেও Java অবজেক্টের ওপর কাজ করে।
JPA এর কাজের প্রক্রিয়া
- Entity Class তৈরি:
- Java ক্লাসে
@Entityঅ্যানোটেশন ব্যবহার করে ডেটাবেস টেবিলের সাথে সম্পর্কিত অবজেক্ট তৈরি করা হয়।
- Java ক্লাসে
- Database Operations:
- JPA EntityManager ব্যবহার করে CRUD অপারেশন এবং কুয়েরি করা হয়।
- JPQL (Java Persistence Query Language):
- JPA একটি কাস্টম কুয়েরি ল্যাঙ্গুয়েজ প্রদান করে, যা SQL এর মতো তবে তা Java অবজেক্টের উপর কাজ করে।
JPA উদাহরণ
এখন একটি সহজ JPA উদাহরণ দেখি, যেখানে Employee নামক একটি Entity ক্লাস তৈরি করা হয়েছে এবং এটি ডেটাবেসের employee টেবিলের সাথে সম্পর্কিত।
1. Employee Entity Class:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private int id;
private String name;
private String position;
// Constructors, Getters, and Setters
public Employee(int id, String name, String position) {
this.id = id;
this.name = name;
this.position = position;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
এখানে:
@Entityঅ্যানোটেশন দ্বারাEmployeeক্লাসটি একটি JPA Entity হিসেবে ঘোষণা করা হয়েছে।@Idদ্বারাidপ্রপার্টি ডেটাবেস টেবিলের প্রাইমারি কি হিসেবে চিহ্নিত হয়েছে।
2. EmployeeRepository Interface:
import org.springframework.data.jpa.repository.JpaRepository;
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
// Custom queries can be defined here
}
এখানে:
EmployeeRepositoryইন্টারফেসটিJpaRepositoryইন্টারফেসটি এক্সটেন্ড করেছে, যা JPA এর মাধ্যমে ডেটাবেস অপারেশনগুলো সহজ করে দেয়।JpaRepositoryপ্রাথমিক CRUD অপারেশনগুলো যেমনsave(),findById(),deleteById()ইত্যাদি প্রদান করে।
3. EmployeeController:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class EmployeeController {
@Autowired
private EmployeeRepository employeeRepository;
@GetMapping("/employees")
public List<Employee> getEmployees() {
return employeeRepository.findAll();
}
}
এখানে:
EmployeeControllerক্লাসটি REST API তৈরি করেছে যাGET /employeesএ রিকোয়েস্ট পাঠালে সকলEmployeeঅবজেক্ট JSON ফরম্যাটে রিটার্ন করবে।
4. JSON রেসপন্স:
যখন ক্লায়েন্ট GET /employees রিকোয়েস্ট পাঠাবে, তখন সার্ভার JSON রেসপন্স পাঠাবে, যা দেখতে এমন হবে:
[
{
"id": 1,
"name": "John Doe",
"position": "Software Engineer"
},
{
"id": 2,
"name": "Jane Smith",
"position": "Project Manager"
}
]
সারাংশ
ORM (Object-Relational Mapping) হল একটি প্রযুক্তি যা অবজেক্ট ও রিলেশনাল ডেটাবেসের মধ্যে সম্পর্ক স্থাপন করে। JPA (Java Persistence API) হল Java-তে ORM সমর্থন করার জন্য একটি স্ট্যান্ডার্ড স্পেসিফিকেশন। JPA ডেটাবেস টেবিলের সাথে Java অবজেক্টগুলোকে সম্পর্কিত করতে সহায়তা করে এবং ডেটাবেস অপারেশনগুলো সহজ করে।
JPA-এর মাধ্যমে আমরা Entity Class তৈরি করে ডেটাবেস টেবিলের সাথে সম্পর্ক স্থাপন করি এবং JPQL (Java Persistence Query Language) ব্যবহার করে ডেটাবেস কুয়েরি চালাই। Spring Data JPA আমাদের CRUD অপারেশনগুলিকে আরো সহজ এবং দ্রুত করে তোলে, যেটি ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য খুবই উপকারী।
Read more