স্প্রিং ফ্রেমওয়ার্কে ORM (Object-Relational Mapping) ইন্টিগ্রেশন ডেটাবেস অপারেশনগুলিকে সহজ এবং কার্যকরী করে তোলে। স্প্রিং ফ্রেমওয়ার্ক Hibernate এবং JPA (Java Persistence API) সহ জনপ্রিয় ORM টুলসের সাথে ইন্টিগ্রেশন সমর্থন করে। Hibernate এবং JPA স্প্রিং ফ্রেমওয়ার্কের সাথে সহজভাবে ইন্টিগ্রেট হয়ে জাভা অবজেক্ট থেকে ডেটাবেস টেবিলের মধ্যে ডেটা ম্যাপিং করতে সাহায্য করে। স্প্রিং ORM ইন্টিগ্রেশন ডেটাবেস অপারেশনকে অবজেক্ট ওরিয়েন্টেড স্টাইলের সাথে সম্মিলিত করে, যা কোডিংয়ের সময়ে কার্যকারিতা এবং স্কেলেবিলিটি বৃদ্ধি করে।
এই টিউটোরিয়ালে, আমরা Hibernate এবং JPA এর সাথে স্প্রিং ORM ইন্টিগ্রেশন কনফিগারেশন এবং উদাহরণ দেখব।
Hibernate একটি জনপ্রিয় ORM টুল যা ডেটাবেসের টেবিলগুলির সাথে জাভা অবজেক্ট ম্যাপিং করতে ব্যবহৃত হয়। স্প্রিং ফ্রেমওয়ার্কের মাধ্যমে হাইবারনেট ব্যবহার করলে, ORM সম্পর্কিত সমস্ত কার্যক্রম যেমন ডেটা সংরক্ষণ, আপডেট, ডিলিট, সিলেক্ট ইত্যাদি কার্যকরভাবে পরিচালনা করা যায়।
স্প্রিংে Hibernate ইন্টিগ্রেশন করার জন্য প্রথমে Hibernate এর কনফিগারেশন ফাইল তৈরি করতে হবে।
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<!-- Specify dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed queries -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention annotated class -->
<mapping class="com.example.User"/>
</session-factory>
</hibernate-configuration>
এখানে, আমরা hibernate.cfg.xml
ফাইলটি ব্যবহার করে হাইবারনেট কনফিগারেশন তৈরি করেছি।
এখন, আমরা একটি সিম্পল UserService তৈরি করব, যা হাইবারনেটের মাধ্যমে ডেটাবেসে ইউজারের ডেটা সেভ এবং রিট্রিভ করবে।
package com.example;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.hibernate.Session;
import org.hibernate.Transaction;
@Service
public class UserService {
@Autowired
private SessionFactory sessionFactory;
public void saveUser(User user) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.save(user); // Save the user
transaction.commit();
session.close();
}
public User getUser(int id) {
Session session = sessionFactory.openSession();
User user = session.get(User.class, id); // Retrieve user by ID
session.close();
return user;
}
}
স্প্রিংে হাইবারনেট ইন্টিগ্রেট করার জন্য User
ক্লাসটি তৈরি করতে হবে যা JPA annotations বা Hibernate annotations ব্যবহার করে ডেটাবেস টেবিলের সাথে ম্যাপ হবে।
package com.example;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private int id;
private String name;
private String email;
// Getters and Setters
}
এখানে, @Entity অ্যানোটেশনটি ইউজার ক্লাসকে হাইবারনেট টেবিলের সাথে ম্যাপ করতে সাহায্য করে, এবং @Id দ্বারা ID ফিল্ডটি প্রাথমিক কী হিসেবে নির্ধারিত হয়।
স্প্রিং কনটেইনারে হাইবারনেট কনফিগারেশন এবং সেশন ফ্যাক্টরি তৈরি করার জন্য, আমরা Java-based Configuration ব্যবহার করব।
package com.example;
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setPackagesToScan("com.example"); // Specify the package to scan for entities
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public org.springframework.core.env.Environment hibernateProperties() {
org.springframework.core.env.Properties props = new org.springframework.core.env.Properties();
props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
props.setProperty("hibernate.hbm2ddl.auto", "update");
props.setProperty("hibernate.show_sql", "true");
return props;
}
}
এখন, আমরা একটি মূল অ্যাপ্লিকেশন ক্লাস তৈরি করব যা স্প্রিং কনটেইনার থেকে ইউজার সার্ভিস বিইনটিকে ইনজেক্ট করে এবং ইউজারের ডেটা সেভ করবে।
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
User user = new User();
user.setId(1);
user.setName("John Doe");
user.setEmail("john@example.com");
userService.saveUser(user);
System.out.println("User saved successfully!");
}
}
JPA (Java Persistence API) স্প্রিং ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করতে পারেন এবং JPA ব্যবহার করে ডেটাবেস পরিচালনা করতে পারেন। স্প্রিং ডেটা JPA স্প্রিংে JPA repositories পরিচালনা করার জন্য ব্যবহৃত হয়। JPA ব্যবহারের মাধ্যমে হাইবারনেটের অনেক ফিচার স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় এবং এটি কোডিং সিমপ্লিফাই করে।
package com.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import javax.sql.DataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository")
public class JpaConfig {
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/mydb")
.username("root")
.password("password")
.driverClassName("com.mysql.cj.jdbc.Driver")
.build();
}
}
package com.example;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private int id;
private String name;
private String email;
// Getters and Setters
}
package com.example.repository;
import com.example.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Integer> {
User findByName(String name);
}
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.repository.UserRepository;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void saveUser(User user) {
userRepository.save(user); // JPA save method
}
public User getUser(int id) {
return userRepository.findById(id).orElse(null); // JPA find by ID
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(JpaConfig.class);
UserService userService = context.getBean(UserService.class);
User user = new User();
user.setId(1);
user.setName("Jane Doe");
user.setEmail("jane@example.com");
userService.saveUser(user);
System.out.println("User saved using JPA!");
}
}
স্প্রিং ORM Integration (Hibernate, JPA) এর মাধ্যমে আপনি সহজেই ডেটাবেস অপারেশন যেমন সেভ, রিট্রিভ, আপডেট, ডিলিট ইত্যাদি কার্যকরভাবে করতে পারেন। Hibernate স্প্রিং এর সাথে ইন্টিগ্রেট করার জন্য SessionFactory এবং Transaction ব্যবস্থাপনা ব্যবহার করা হয়, যেখানে JPA সহজে ডেটাবেস অপারেশন পরিচালনা করার জন্য ডিফল্ট ORM ইঞ্জিন হিসেবে ব্যবহৃত হয়। Spring Data JPA দিয়ে, আপনি JPA repository এর সাহায্যে আরও কার্যকরভাবে ডেটাবেসের সাথে কাজ করতে পারেন, যা কোডকে আরও সহজ এবং কমপ্যাক্ট করে।
Spring Framework, Hibernate, এবং JPA (Java Persistence API) এর একত্রিত ব্যবহার একটি শক্তিশালী সমাধান প্রদান করে ডাটাবেস সম্পর্কিত কার্যাবলী এবং অবজেক্ট রিলেশনাল ম্যানেজমেন্ট (ORM) এর জন্য। Spring Framework ডিপেনডেন্সি ইনজেকশন, এএসপেক্ট-অরিয়েন্টেড প্রোগ্রামিং (AOP), এবং অন্যান্য সেবা সরবরাহ করে, যখন Hibernate এবং JPA ORM টেকনোলজি ডাটাবেসের সাথে অবজেক্ট সম্পর্কিত কার্যাবলী পরিচালনা করে।
Spring Framework এর সাথে Hibernate এবং JPA Integration ডাটাবেস ইন্টিগ্রেশন সহজ করে, কারণ এতে ডাটাবেসের CRUD (Create, Read, Update, Delete) অপারেশনগুলোর জন্য Java অবজেক্টগুলি ব্যবহার করা হয়। এই টিউটোরিয়ালে আমরা দেখব কিভাবে Spring Framework এর সাথে Hibernate এবং JPA ইন্টিগ্রেট করা যায়।
Hibernate ORM একটি জনপ্রিয় Java লাইব্রেরি যা Java অবজেক্টগুলোকে রিলেশনাল ডাটাবেস টেবিলের সাথে ম্যাপ করে। Hibernate একটি পূর্ণাঙ্গ ORM সলিউশন এবং JPA (Java Persistence API) এর উপরে কাজ করে, যা একটি Java স্ট্যান্ডার্ড API এবং ডাটাবেস ইন্টিগ্রেশন সহজ করে তোলে।
Spring Framework এর সাথে Hibernate বা JPA ইন্টিগ্রেট করার ফলে আমরা সহজে ডাটাবেস অপারেশন করতে পারি, যেমন অবজেক্ট ডাটাবেসে সেভ (Save), আপডেট (Update), রিড (Read), এবং ডিলিট (Delete) করা।
Spring Framework এর সাথে Hibernate বা JPA ইন্টিগ্রেট করার জন্য Maven বা Gradle ডিপেনডেন্সি যোগ করতে হয়।
<dependencies>
<!-- Spring ORM dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.20</version> <!-- Use the latest stable version -->
</dependency>
<!-- Hibernate ORM dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.5.6.Final</version>
</dependency>
<!-- Spring Data JPA dependency -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.5.4</version>
</dependency>
<!-- H2 Database (or use your preferred database like MySQL/PostgreSQL) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
dependencies {
// Spring ORM dependency
implementation 'org.springframework:spring-orm:5.3.20'
// Hibernate ORM dependency
implementation 'org.hibernate:hibernate-core:5.5.6.Final'
// Spring Data JPA dependency
implementation 'org.springframework.data:spring-data-jpa:2.5.4'
// H2 Database (or use your preferred database like MySQL/PostgreSQL)
runtimeOnly 'com.h2database:h2'
}
Hibernate বা JPA ব্যবহার করার জন্য Spring Framework এর সাথে কনফিগারেশন করতে হয়। এখানে আমরা Java-based configuration এবং application.properties ফাইল ব্যবহার করে Hibernate/JPA কনফিগারেশন দেখাবো।
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import javax.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.sql.DataSource;
@Configuration
public class HibernateConfig {
@Autowired
private DataSource dataSource;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setPackagesToScan("com.example.model"); // Specify the package where your JPA Entities are located
factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
return factoryBean;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
}
JPA ব্যবহার করে Entity Class তৈরি করতে হয় যা ডাটাবেস টেবিলের সাথে ম্যাপ করা হয়।
package com.example.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private double salary;
// Getters and Setters
}
এখানে, Employee
ক্লাসটি একটি JPA Entity যা ডাটাবেস টেবিলের সাথে সম্পর্কিত। @Entity অ্যানোটেশন দ্বারা ক্লাসটি Entity হিসেবে চিহ্নিত করা হয় এবং @Id দ্বারা প্রাইমারি কী ফিল্ড নির্ধারিত হয়।
Spring Data JPA ব্যবহারে আপনি repository interface তৈরি করতে পারেন যা ডাটাবেসে CRUD অপারেশন পরিচালনা করে।
package com.example.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.model.Employee;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
// Custom query methods can be defined here
}
এখানে, EmployeeRepository ইন্টারফেসটি JpaRepository এক্সটেন্ড করে, যা Employee
Entity এর জন্য CRUD অপারেশন পরিচালনা করবে।
Spring Boot বা Spring Framework ব্যবহারে DataSource কনফিগার করতে হবে যাতে Hibernate/JPA ডাটাবেসে সংযোগ স্থাপন করতে পারে।
# Database Configuration (H2 example)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# Hibernate Configuration
spring.jpa.hibernate.ddl-auto=update # For creating/updating tables automatically
spring.jpa.show-sql=true # To show SQL queries in the console
এখানে, spring.datasource.url দ্বারা ডাটাবেসের URL, spring.jpa.hibernate.ddl-auto=update দ্বারা Hibernate কে ডাটাবেস টেবিল স্বয়ংক্রিয়ভাবে তৈরি/আপডেট করার নির্দেশ দেওয়া হয়েছে।
Spring Framework এর সাথে Hibernate এবং JPA ইন্টিগ্রেট করার মাধ্যমে আপনি শক্তিশালী এবং স্কেলেবল ডাটাবেস অ্যাপ্লিকেশন তৈরি করতে পারেন। Hibernate এবং JPA ORM টেকনোলজি ব্যবহার করে আপনি Java অবজেক্টগুলি ডাটাবেস টেবিলের সাথে ম্যাপ করতে পারেন এবং Spring Data JPA ব্যবহারে CRUD অপারেশন সহজেই করতে পারেন। Spring IoC Container এবং Spring AOP এর মাধ্যমে Hibernate এবং JPA ইন্টিগ্রেশন আরও সহজ এবং মডুলার হয়ে ওঠে।
Spring Data JPA হল Spring Framework-এর একটি সাব-ফ্রেমওয়ার্ক যা Java Persistence API (JPA) এর উপর ভিত্তি করে ডেটাবেস অপারেশন সহজভাবে পরিচালনা করতে সাহায্য করে। এটি ডেটাবেসের সাথে কাজ করার সময় ডেটা ম্যানিপুলেশন প্রক্রিয়াকে আরও সহজ এবং দ্রুত করে তোলে, কারণ এটি কমপ্লেক্স কোড লেখা ছাড়াই CRUD (Create, Read, Update, Delete) অপারেশন সম্পাদন করতে পারে।
Spring Data JPA আমাদের repository pattern অনুসরণ করে, যা ডেটা অ্যাক্সেস স্তরকে আরও পরিষ্কার এবং সুসংগঠিত করে তোলে।
এই গাইডে আমরা Spring Data JPA ব্যবহার করে কিভাবে সহজ ডেটা ম্যানিপুলেশন করা যায় তা দেখবো।
Spring Data JPA ব্যবহার করতে হলে প্রথমে আপনাকে আপনার Spring প্রজেক্টে কিছু ডিপেনডেন্সি যোগ করতে হবে। নিচে Maven এবং Gradle এর জন্য ডিপেনডেন্সি কনফিগারেশন দেওয়া হয়েছে।
<dependencies>
<!-- Spring Boot Starter Data JPA for JPA repository support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Starter Web for creating RESTful API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- H2 Database for in-memory database (for testing purposes) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot Starter Test for unit testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
dependencies {
// Spring Boot Starter Data JPA for JPA repository support
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// Spring Boot Starter Web for creating RESTful API
implementation 'org.springframework.boot:spring-boot-starter-web'
// H2 Database for in-memory database (for testing purposes)
runtimeOnly 'com.h2database:h2'
// Spring Boot Starter Test for unit testing
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Spring Data JPA ব্যবহার করে ডেটা ম্যানিপুলেশন করতে Entity, Repository, এবং Service ক্লাস তৈরি করা হয়।
Spring Data JPA-তে Entity একটি Java ক্লাস যা ডেটাবেসের টেবিলের সাথে সম্পর্কিত। এই ক্লাসে @Entity
অ্যনোটেশন ব্যবহার করা হয় এবং এটি একটি table প্রতিনিধিত্ব করে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Person {
@Id
private Long id;
private String name;
private int age;
// Getters and Setters
public Person() {}
public Person(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getters and setters
}
এখানে, Person
ক্লাসটি একটি Entity যা person
নামক টেবিলের সাথে সম্পর্কিত। @Id
অ্যনোটেশন দিয়ে id ফিল্ডকে প্রাইমারি কি হিসেবে চিহ্নিত করা হয়েছে।
Spring Data JPA-তে Repository একটি ইন্টারফেস যা ডেটা অ্যাক্সেস লেয়ার তৈরি করে। এটি JPA রেপোজিটরি ইন্টারফেসের মাধ্যমে CRUD অপারেশন সরবরাহ করে। আপনি JpaRepository
বা CrudRepository
ইন্টারফেস ইমপ্লিমেন্ট করতে পারেন।
import org.springframework.data.jpa.repository.JpaRepository;
public interface PersonRepository extends JpaRepository<Person, Long> {
// Custom queries can be defined here
Person findByName(String name);
}
এখানে, PersonRepository
ইন্টারফেসটি JpaRepository
ইন্টারফেস এক্সটেন্ড করছে এবং এতে স্বয়ংক্রিয়ভাবে CRUD অপারেশন (যেমন save()
, findById()
, findAll()
, delete()
) চলে আসে। এছাড়া, findByName()
পদ্ধতিটি কাস্টম কুয়েরি হিসেবে ডিফাইন করা হয়েছে।
Service ক্লাসটি সাধারণত আপনার অ্যাপ্লিকেশনের লজিকাল স্তর থাকে এবং এটি @Service
অ্যনোটেশন দিয়ে চিহ্নিত করা হয়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PersonService {
@Autowired
private PersonRepository personRepository;
public Person savePerson(Person person) {
return personRepository.save(person);
}
public Person getPersonById(Long id) {
return personRepository.findById(id).orElse(null);
}
public Person getPersonByName(String name) {
return personRepository.findByName(name);
}
public void deletePerson(Long id) {
personRepository.deleteById(id);
}
}
এখানে, PersonService
ক্লাসে বিভিন্ন business logic লেখা হয়েছে। @Autowired
এর মাধ্যমে PersonRepository
ইনজেক্ট করা হয়েছে, এবং save, find, delete পদ্ধতিগুলি কার্যকর করা হয়েছে।
Spring MVC কন্ট্রোলার ব্যবহার করে আপনি REST API তৈরি করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
@PostMapping
public Person createPerson(@RequestBody Person person) {
return personService.savePerson(person);
}
@GetMapping("/{id}")
public Person getPerson(@PathVariable Long id) {
return personService.getPersonById(id);
}
@GetMapping("/name/{name}")
public Person getPersonByName(@PathVariable String name) {
return personService.getPersonByName(name);
}
@DeleteMapping("/{id}")
public void deletePerson(@PathVariable Long id) {
personService.deletePerson(id);
}
}
এখানে, PersonController
ক্লাসে RESTful API তৈরি করা হয়েছে যা PersonService
ক্লাসের মাধ্যমে CRUD অপারেশন পরিচালনা করবে। @RequestBody
, @PathVariable
, @PostMapping
, @GetMapping
ইত্যাদি Spring MVC এর অ্যানোটেশন ব্যবহৃত হয়েছে।
Person person = new Person(1L, "John Doe", 30);
personService.savePerson(person);
এখানে personService.savePerson()
কল করা হচ্ছে, যা PersonRepository.save()
পদ্ধতিটি কল করবে এবং ডেটাবেসে ডেটা সেভ করবে।
Person person = personService.getPersonById(1L);
System.out.println(person.getName());
এখানে personService.getPersonById()
কল করে PersonRepository.findById()
পদ্ধতিটি ব্যবহার করে ডেটা রিড করা হয়েছে।
Person person = personService.getPersonById(1L);
person.setAge(31);
personService.savePerson(person);
এখানে, savePerson()
কল করার মাধ্যমে existing Person
ইনস্ট্যান্স আপডেট করা হয়েছে।
personService.deletePerson(1L);
এখানে deletePerson()
কল করে PersonRepository.deleteById()
পদ্ধতিটি ব্যবহৃত হয়েছে, যা ডেটাবেস থেকে নির্দিষ্ট আইডির Person
ডিলিট করবে।
@Query
অ্যানোটেশন ব্যবহার করে আপনি কাস্টম কুয়েরি তৈরি করতে পারেন, যা ডেটাবেস অপারেশন আরও শক্তিশালী করে।Repository
ইন্টারফেসের মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করে।Spring Data JPA ব্যবহার করে ডেটা ম্যানিপুলেশন অত্যন্ত সহজ এবং কার্যকরী হয়। Spring Data JPA দ্বারা আপনি দ্রুত CRUD অপারেশন, কাস্টম কুয়েরি, পেজিনেশন, এবং ডেটাবেস অপারেশনগুলো সহজে পরিচালনা করতে পারেন। Spring Data JPA Spring Framework-এর মধ্যে একটি খুবই শক্তিশালী এবং কার্যকরী টুল, যা ডেটাবেস অ্যাপ্লিকেশনের ডেভেলপমেন্টে অত্যন্ত সাহায্যকারী।
Spring ORM (Object-Relational Mapping) হল Spring Framework এর একটি উপাদান যা ORM টেকনোলজির সাথে ইন্টিগ্রেশন প্রদান করে, যেমন Hibernate, JPA (Java Persistence API), JDO (Java Data Objects) ইত্যাদি। ORM হল একটি প্রযুক্তি যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ধারণাগুলিকে সম্পর্কিত ডেটাবেসের সাথে সংযুক্ত করে এবং ডেটাবেস থেকে অবজেক্ট তৈরি বা ম্যানিপুলেট করতে সাহায্য করে।
Spring ORM একটি পরিষ্কার এবং কার্যকরী উপায় প্রদান করে যাতে Spring অ্যাপ্লিকেশন ORM ফিচারগুলির সুবিধা নিতে পারে এবং এটি সহজে Hibernate বা JPA এর সাথে কাজ করতে পারে।
এখানে আমরা Spring ORM Integration এবং Hibernate এর সাথে কিভাবে Spring প্রজেক্টে ORM ইন্টিগ্রেট করতে হয় তা উদাহরণ সহ দেখব।
Spring ORM এবং Hibernate ব্যবহারের জন্য প্রথমে আপনার pom.xml
ফাইলে কিছু ডিপেনডেন্সি যোগ করতে হবে:
<dependencies>
<!-- Spring ORM Dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<!-- Hibernate Core Dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.8.Final</version> <!-- Use the version that fits your project -->
</dependency>
<!-- Spring JDBC Dependency (For DataSource support) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- JDBC Driver for your database (e.g., MySQL) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Spring Transaction Management Dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
</dependencies>
এটি Spring ORM এবং Hibernate এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করবে। আপনি যদি JPA ব্যবহার করতে চান তবে hibernate-entitymanager ডিপেনডেন্সিও যোগ করতে পারেন।
Hibernate কনফিগারেশনের জন্য একটি hibernate.cfg.xml
ফাইল তৈরি করুন, যেখানে ডেটাবেস কনফিগারেশন এবং Hibernate-এর অন্যান্য প্রয়োজনীয় সেটিংস থাকবে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_database_name</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<!-- Specify dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
</session-factory>
</hibernate-configuration>
এখানে আপনি ডেটাবেসের URL, ইউজারনেম, পাসওয়ার্ড, এবং Hibernate-এর কনফিগারেশন সেটিংস উল্লেখ করবেন।
Spring কনফিগারেশনে LocalSessionFactoryBean
এবং HibernateTransactionManager
ব্যবহার করে Hibernate কনফিগারেশন করা হয়।
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example")
public class HibernateConfig {
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database_name");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setPackagesToScan("com.example.model"); // Model classes package
factoryBean.setHibernateProperties(hibernateProperties());
return factoryBean;
}
@Bean
public PlatformTransactionManager hibernateTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.hbm2ddl.auto", "update");
return properties;
}
}
এখানে:
LocalSessionFactoryBean
Hibernate session factory তৈরি করে।hibernateTransactionManager
Hibernate ট্রানজেকশন ম্যানেজার তৈরি করে।<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database_name"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.example.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven />
এই কনফিগারেশন XML দ্বারা Hibernate সেটআপ এবং ডেটাবেস কনফিগারেশন সম্পন্ন হয়।
Hibernate ORM ব্যবহার করার জন্য আপনাকে একটি Model class তৈরি করতে হবে যা ডেটাবেস টেবিলের সাথে ম্যাপ হবে।
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String email;
// Getter and Setter methods
}
এখানে:
@Entity
: ক্লাসটিকে Hibernate entity হিসেবে চিহ্নিত করে।@Table
: টেবিলের নাম নির্ধারণ করে।@Id
: প্রাইমারি কী নির্দেশ করে।@GeneratedValue
: প্রাইমারি কীর জন্য অটো-জেনারেট ভ্যালু।DAO ক্লাসের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করা হয়। DAO ক্লাস Hibernate session ব্যবহার করে ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলতে সহায়তা করে।
@Repository
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
public void saveUser(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
public User getUserById(int id) {
Session session = sessionFactory.getCurrentSession();
return session.get(User.class, id);
}
}
এখানে:
sessionFactory.getCurrentSession()
: একটি Hibernate session তৈরি করে।session.save()
: ডেটাবেসে নতুন ইউজার সংরক্ষণ করে।session.get()
: প্রাইমারি কীর মাধ্যমে ডেটাবেস থেকে ইউজার তথ্য ফেরত আনে।Service Layer এ DAO ক্লাসের মাধ্যমে ডেটা অ্যাক্সেস করা হয় এবং বিভিন্ন ব্যবসায়িক লজিক বাস্তবায়ন করা হয়।
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void addUser(User user) {
userDao.saveUser(user);
}
public User getUser(int id) {
return userDao.getUserById(id);
}
}
Spring MVC এর controller ক্লাস থেকে আমরা Service ক্লাসের মেথড কল করে ডেটাবেস থেকে ডেটা পরিচালনা করি।
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/add")
public String addUser(@RequestBody User user) {
userService.addUser(user);
return "User added successfully!";
}
@GetMapping("/get/{id}")
public User getUser(@PathVariable int id) {
return userService.getUser(id);
}
}
Spring ORM (Object-Relational Mapping) এবং Hibernate ব্যবহারের মাধ্যমে ডেটাবেস অ্যাক্সেস এবং অবজেক্ট ম্যানেজমেন্ট সহজ করা যায়। Spring ORM এর সাহায্যে Hibernate-এর সাথে ইন্টিগ্রেশন সরলীকৃত হয়, যেখানে LocalSessionFactoryBean
, HibernateTransactionManager
, এবং DAO লেয়ার এর মাধ্যমে ডেটা ম্যানিপুলেশন করা যায়। Spring Boot ব্যবহার করলে, Spring ORM এর কনফিগারেশন আরও সহজ হয়ে যায় এবং প্রজেক্ট ডেভেলপমেন্ট দ্রুত সম্পন্ন করা সম্ভব হয়।
Read more