Spring ORM ব্যবহার করে Java-তে ডাটাবেসের সঙ্গে CRUD (Create, Read, Update, Delete) অপারেশন সহজেই বাস্তবায়ন করা যায়। Hibernate ORM ফ্রেমওয়ার্ক এবং Spring-এর Transaction Management ব্যবহারের মাধ্যমে এটি করা হয়। নিচে উদাহরণ সহ ব্যাখ্যা দেওয়া হলো।
প্রাথমিক কনফিগারেশন
Maven ডিপেনডেন্সি
প্রথমে প্রকল্পে Hibernate এবং Spring ORM-এর ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>YOUR_SPRING_VERSION</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>YOUR_HIBERNATE_VERSION</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>YOUR_MYSQL_VERSION</version>
</dependency>
Hibernate Configuration
Hibernate Configuration ফাইল hibernate.cfg.xml উদাহরণ:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring_orm_demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
মডেল ক্লাস তৈরি
উদাহরণস্বরূপ, একটি Employee ক্লাস তৈরি করা হলো:
package com.example.model;
import jakarta.persistence.*;
@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "department")
private String department;
@Column(name = "salary")
private Double salary;
// Getters and Setters
}
DAO (Data Access Object) তৈরি
Spring ORM এ DAO ক্লাস Hibernate ব্যবহার করে ডাটাবেস অপারেশন পরিচালনা করে।
package com.example.dao;
import com.example.model.Employee;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
public void save(Employee employee) {
Session session = sessionFactory.getCurrentSession();
session.save(employee);
}
public Employee getById(Long id) {
Session session = sessionFactory.getCurrentSession();
return session.get(Employee.class, id);
}
public List<Employee> getAll() {
Session session = sessionFactory.getCurrentSession();
return session.createQuery("from Employee", Employee.class).list();
}
public void update(Employee employee) {
Session session = sessionFactory.getCurrentSession();
session.update(employee);
}
public void delete(Long id) {
Session session = sessionFactory.getCurrentSession();
Employee employee = session.get(Employee.class, id);
if (employee != null) {
session.delete(employee);
}
}
}
সার্ভিস ক্লাস তৈরি
DAO ক্লাসের ওপর ভিত্তি করে সার্ভিস লেয়ার তৈরি করা হয়:
package com.example.service;
import com.example.dao.EmployeeDao;
import com.example.model.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class EmployeeService {
@Autowired
private EmployeeDao employeeDao;
public void saveEmployee(Employee employee) {
employeeDao.save(employee);
}
public Employee getEmployeeById(Long id) {
return employeeDao.getById(id);
}
public List<Employee> getAllEmployees() {
return employeeDao.getAll();
}
public void updateEmployee(Employee employee) {
employeeDao.update(employee);
}
public void deleteEmployee(Long id) {
employeeDao.delete(id);
}
}
Spring Configuration
Spring Configuration এ Hibernate SessionFactory Bean তৈরি করতে হবে:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_orm_demo");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("com.example.model");
return sessionFactory;
}
}
CRUD অপারেশন পরীক্ষা করা
Spring এর সাহায্যে CRUD অপারেশন চালানোর জন্য নিচে একটি Main ক্লাস উদাহরণ দেওয়া হলো:
package com.example;
import com.example.model.Employee;
import com.example.service.EmployeeService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
EmployeeService employeeService = context.getBean(EmployeeService.class);
// Create
Employee employee = new Employee();
employee.setName("John Doe");
employee.setDepartment("IT");
employee.setSalary(50000.0);
employeeService.saveEmployee(employee);
// Read
Employee fetchedEmployee = employeeService.getEmployeeById(employee.getId());
System.out.println("Fetched Employee: " + fetchedEmployee.getName());
// Update
fetchedEmployee.setSalary(60000.0);
employeeService.updateEmployee(fetchedEmployee);
// Delete
employeeService.deleteEmployee(fetchedEmployee.getId());
context.close();
}
}
Spring ORM এবং Hibernate ব্যবহার করে এভাবে CRUD অপারেশন সহজেই বাস্তবায়ন করা যায়। এই উদাহরণ ডাটাবেসের সঙ্গে ইন্টিগ্রেশন এবং স্প্রিং এর শক্তিশালী ফিচার ব্যবহার করে উন্নত অ্যাপ্লিকেশন তৈরির জন্য একটি মডেল হিসেবে কাজ করে।
Read more