Spring ORM Integration (Hibernate, JPA)

Java Technologies - স্প্রিং (Spring)
136
136

স্প্রিং ফ্রেমওয়ার্কে ORM (Object-Relational Mapping) ইন্টিগ্রেশন ডেটাবেস অপারেশনগুলিকে সহজ এবং কার্যকরী করে তোলে। স্প্রিং ফ্রেমওয়ার্ক Hibernate এবং JPA (Java Persistence API) সহ জনপ্রিয় ORM টুলসের সাথে ইন্টিগ্রেশন সমর্থন করে। Hibernate এবং JPA স্প্রিং ফ্রেমওয়ার্কের সাথে সহজভাবে ইন্টিগ্রেট হয়ে জাভা অবজেক্ট থেকে ডেটাবেস টেবিলের মধ্যে ডেটা ম্যাপিং করতে সাহায্য করে। স্প্রিং ORM ইন্টিগ্রেশন ডেটাবেস অপারেশনকে অবজেক্ট ওরিয়েন্টেড স্টাইলের সাথে সম্মিলিত করে, যা কোডিংয়ের সময়ে কার্যকারিতা এবং স্কেলেবিলিটি বৃদ্ধি করে।

এই টিউটোরিয়ালে, আমরা Hibernate এবং JPA এর সাথে স্প্রিং ORM ইন্টিগ্রেশন কনফিগারেশন এবং উদাহরণ দেখব।


Spring ORM Integration (Hibernate)

Hibernate একটি জনপ্রিয় ORM টুল যা ডেটাবেসের টেবিলগুলির সাথে জাভা অবজেক্ট ম্যাপিং করতে ব্যবহৃত হয়। স্প্রিং ফ্রেমওয়ার্কের মাধ্যমে হাইবারনেট ব্যবহার করলে, ORM সম্পর্কিত সমস্ত কার্যক্রম যেমন ডেটা সংরক্ষণ, আপডেট, ডিলিট, সিলেক্ট ইত্যাদি কার্যকরভাবে পরিচালনা করা যায়।

Step 1: Hibernate Configuration (XML-based)

স্প্রিংে 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 ফাইলটি ব্যবহার করে হাইবারনেট কনফিগারেশন তৈরি করেছি।

Step 2: Service Layer for Hibernate Integration

এখন, আমরা একটি সিম্পল 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;
    }
}

Step 3: Hibernate Entity Class (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 ফিল্ডটি প্রাথমিক কী হিসেবে নির্ধারিত হয়।

Step 4: Spring Application Context (Java-based)

স্প্রিং কনটেইনারে হাইবারনেট কনফিগারেশন এবং সেশন ফ্যাক্টরি তৈরি করার জন্য, আমরা 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;
    }
}

Step 5: Main Application

এখন, আমরা একটি মূল অ্যাপ্লিকেশন ক্লাস তৈরি করব যা স্প্রিং কনটেইনার থেকে ইউজার সার্ভিস বিইনটিকে ইনজেক্ট করে এবং ইউজারের ডেটা সেভ করবে।

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!");
    }
}

Spring JPA Integration

JPA (Java Persistence API) স্প্রিং ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করতে পারেন এবং JPA ব্যবহার করে ডেটাবেস পরিচালনা করতে পারেন। স্প্রিং ডেটা JPA স্প্রিংে JPA repositories পরিচালনা করার জন্য ব্যবহৃত হয়। JPA ব্যবহারের মাধ্যমে হাইবারনেটের অনেক ফিচার স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় এবং এটি কোডিং সিমপ্লিফাই করে।

Step 1: Spring Data JPA Configuration (Java-based)

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();
    }
}

Step 2: JPA Entity (User)

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
}

Step 3: JPA Repository

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);
}

Step 4: Service Layer with JPA

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
    }
}

Step 5: Main Application

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!");
    }
}

Conclusion

স্প্রিং ORM Integration (Hibernate, JPA) এর মাধ্যমে আপনি সহজেই ডেটাবেস অপারেশন যেমন সেভ, রিট্রিভ, আপডেট, ডিলিট ইত্যাদি কার্যকরভাবে করতে পারেন। Hibernate স্প্রিং এর সাথে ইন্টিগ্রেট করার জন্য SessionFactory এবং Transaction ব্যবস্থাপনা ব্যবহার করা হয়, যেখানে JPA সহজে ডেটাবেস অপারেশন পরিচালনা করার জন্য ডিফল্ট ORM ইঞ্জিন হিসেবে ব্যবহৃত হয়। Spring Data JPA দিয়ে, আপনি JPA repository এর সাহায্যে আরও কার্যকরভাবে ডেটাবেসের সাথে কাজ করতে পারেন, যা কোডকে আরও সহজ এবং কমপ্যাক্ট করে।

Content added By

Spring Framework এর সাথে Hibernate এবং JPA Integration

101
101

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 ইন্টিগ্রেট করা যায়।


1. Hibernate এবং JPA Integration Overview

Hibernate ORM একটি জনপ্রিয় Java লাইব্রেরি যা Java অবজেক্টগুলোকে রিলেশনাল ডাটাবেস টেবিলের সাথে ম্যাপ করে। Hibernate একটি পূর্ণাঙ্গ ORM সলিউশন এবং JPA (Java Persistence API) এর উপরে কাজ করে, যা একটি Java স্ট্যান্ডার্ড API এবং ডাটাবেস ইন্টিগ্রেশন সহজ করে তোলে।

Spring Framework এর সাথে Hibernate বা JPA ইন্টিগ্রেট করার ফলে আমরা সহজে ডাটাবেস অপারেশন করতে পারি, যেমন অবজেক্ট ডাটাবেসে সেভ (Save), আপডেট (Update), রিড (Read), এবং ডিলিট (Delete) করা।


2. Hibernate এবং JPA Integration এর জন্য ডিপেনডেন্সি যোগ করা

Spring Framework এর সাথে Hibernate বা JPA ইন্টিগ্রেট করার জন্য Maven বা Gradle ডিপেনডেন্সি যোগ করতে হয়।

Maven ডিপেনডেন্সি

<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>

Gradle ডিপেনডেন্সি

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'
}

3. Spring Framework এর সাথে Hibernate/JPA Configuration

Hibernate বা JPA ব্যবহার করার জন্য Spring Framework এর সাথে কনফিগারেশন করতে হয়। এখানে আমরা Java-based configuration এবং application.properties ফাইল ব্যবহার করে Hibernate/JPA কনফিগারেশন দেখাবো।

3.1 Java Configuration (Hibernate/JPA Integration)

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;
    }
}

3.2 Entity Class (JPA)

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 দ্বারা প্রাইমারি কী ফিল্ড নির্ধারিত হয়।

3.3 Spring Data JPA Repository

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 অপারেশন পরিচালনা করবে।

3.4 DataSource Configuration (application.properties)

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 কে ডাটাবেস টেবিল স্বয়ংক্রিয়ভাবে তৈরি/আপডেট করার নির্দেশ দেওয়া হয়েছে।


4. Spring Framework এর সাথে Hibernate/JPA ব্যবহার করার সুবিধা

  1. Simplified Configuration: Spring Framework এবং Hibernate/JPA এর মাধ্যমে ডাটাবেস কনফিগারেশন সহজ করা যায়। Spring Data JPA এর মাধ্যমে CRUD অপারেশনগুলো দ্রুত এবং কার্যকরভাবে সম্পন্ন করা যায়।
  2. Flexibility: Hibernate এবং JPA একটি শক্তিশালী ORM টেকনোলজি যা আপনাকে ডাটাবেস সম্পর্কিত কার্যাবলীর জন্য Java অবজেক্ট ব্যবহার করতে সহায়তা করে। আপনি সহজেই জটিল ডাটাবেস ক্যোয়ারি এবং রিলেশনাল ডাটা ম্যানিপুলেট করতে পারেন।
  3. Transaction Management: Spring Framework এর সাথে ট্রানজেকশন ম্যানেজমেন্ট অটোমেটিকভাবে পরিচালিত হয়, যার ফলে ডাটাবেসে একাধিক অপারেশন সঠিকভাবে পরিচালনা করা যায়।
  4. Integration with Spring AOP: Hibernate বা JPA এর সাথে Spring AOP ব্যবহার করে ট্রানজেকশন ম্যানেজমেন্ট এবং লগিং এর মতো ক্রস-কাটিং কনসার্ন পরিচালনা করা যায়।
  5. Improved Maintainability: Spring Framework এর ডিপেনডেন্সি ইনজেকশন (DI) এবং JPA/Hibernate এর মাধ্যমে কোডে যেকোনো ডাটাবেস সম্পর্কিত পরিবর্তন খুব সহজে করা যায়।

সারাংশ

Spring Framework এর সাথে Hibernate এবং JPA ইন্টিগ্রেট করার মাধ্যমে আপনি শক্তিশালী এবং স্কেলেবল ডাটাবেস অ্যাপ্লিকেশন তৈরি করতে পারেন। Hibernate এবং JPA ORM টেকনোলজি ব্যবহার করে আপনি Java অবজেক্টগুলি ডাটাবেস টেবিলের সাথে ম্যাপ করতে পারেন এবং Spring Data JPA ব্যবহারে CRUD অপারেশন সহজেই করতে পারেন। Spring IoC Container এবং Spring AOP এর মাধ্যমে Hibernate এবং JPA ইন্টিগ্রেশন আরও সহজ এবং মডুলার হয়ে ওঠে।

Content added By

Spring Data JPA এর মাধ্যমে সহজ ডেটা ম্যানিপুলেশন

81
81

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 এর সুবিধা

  1. অটোমেটেড CRUD অপারেশন: Spring Data JPA-তে আপনি কেবলমাত্র repository ইন্টারফেস তৈরি করতে পারেন এবং Spring এর মাধ্যমে CRUD অপারেশনগুলো অটোমেটিক্যালি পরিচালিত হয়।
  2. Custom Queries: JPA-তে @Query অ্যনোটেশন ব্যবহার করে কাস্টম কুয়েরি তৈরি করা যেতে পারে, যা আরও জটিল ডেটাবেস অপারেশন সহজ করে তোলে।
  3. Pagination এবং Sorting: Spring Data JPA সহজেই পেজিনেশন এবং সর্টিং সাপোর্ট করে, যা বড় ডেটাসেটের সাথে কাজ করার সময় খুবই উপকারী।

Spring Data JPA সেটআপ

Spring Data JPA ব্যবহার করতে হলে প্রথমে আপনাকে আপনার Spring প্রজেক্টে কিছু ডিপেনডেন্সি যোগ করতে হবে। নিচে Maven এবং Gradle এর জন্য ডিপেনডেন্সি কনফিগারেশন দেওয়া হয়েছে।

1. Maven Dependency Configuration

<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>

2. Gradle Dependency Configuration

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 এর মাধ্যমে ডেটা ম্যানিপুলেশন

Spring Data JPA ব্যবহার করে ডেটা ম্যানিপুলেশন করতে Entity, Repository, এবং Service ক্লাস তৈরি করা হয়।

1. Entity ক্লাস তৈরি করা

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 ফিল্ডকে প্রাইমারি কি হিসেবে চিহ্নিত করা হয়েছে।

2. Repository Interface তৈরি করা

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() পদ্ধতিটি কাস্টম কুয়েরি হিসেবে ডিফাইন করা হয়েছে।

3. Service ক্লাস তৈরি করা

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 পদ্ধতিগুলি কার্যকর করা হয়েছে।

4. Controller ক্লাস তৈরি করা

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 এর অ্যানোটেশন ব্যবহৃত হয়েছে।


Spring Data JPA এর মাধ্যমে ডেটা ম্যানিপুলেশন: কিছু উদাহরণ

1. ডেটা সেভ করা

Person person = new Person(1L, "John Doe", 30);
personService.savePerson(person);

এখানে personService.savePerson() কল করা হচ্ছে, যা PersonRepository.save() পদ্ধতিটি কল করবে এবং ডেটাবেসে ডেটা সেভ করবে।

2. ডেটা রিড করা

Person person = personService.getPersonById(1L);
System.out.println(person.getName());

এখানে personService.getPersonById() কল করে PersonRepository.findById() পদ্ধতিটি ব্যবহার করে ডেটা রিড করা হয়েছে।

3. ডেটা আপডেট করা

Person person = personService.getPersonById(1L);
person.setAge(31);
personService.savePerson(person);

এখানে, savePerson() কল করার মাধ্যমে existing Person ইনস্ট্যান্স আপডেট করা হয়েছে।

4. ডেটা ডিলিট করা

personService.deletePerson(1L);

এখানে deletePerson() কল করে PersonRepository.deleteById() পদ্ধতিটি ব্যবহৃত হয়েছে, যা ডেটাবেস থেকে নির্দিষ্ট আইডির Person ডিলিট করবে।


Spring Data JPA এর সুবিধা

  1. Automatic CRUD Operations: Spring Data JPA-তে আপনি কেবল repository ইন্টারফেস তৈরি করে CRUD অপারেশন সঞ্চালন করতে পারেন।
  2. Custom Queries: @Query অ্যানোটেশন ব্যবহার করে আপনি কাস্টম কুয়েরি তৈরি করতে পারেন, যা ডেটাবেস অপারেশন আরও শক্তিশালী করে।
  3. Paging and Sorting: Spring Data JPA পেজিনেশন এবং সর্টিং সমর্থন করে, যা বড় ডেটাসেটের সাথে কাজ করার সময় খুবই উপকারী।
  4. Less Boilerplate Code: Spring Data JPA আপনাকে অনেক কোড লেখার হাত থেকে মুক্তি দেয়, কারণ এটি Repository ইন্টারফেসের মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করে।

সারাংশ

Spring Data JPA ব্যবহার করে ডেটা ম্যানিপুলেশন অত্যন্ত সহজ এবং কার্যকরী হয়। Spring Data JPA দ্বারা আপনি দ্রুত CRUD অপারেশন, কাস্টম কুয়েরি, পেজিনেশন, এবং ডেটাবেস অপারেশনগুলো সহজে পরিচালনা করতে পারেন। Spring Data JPA Spring Framework-এর মধ্যে একটি খুবই শক্তিশালী এবং কার্যকরী টুল, যা ডেটাবেস অ্যাপ্লিকেশনের ডেভেলপমেন্টে অত্যন্ত সাহায্যকারী।

Content added By

উদাহরণ সহ Spring ORM Integration

104
104

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 Integration Steps

১. Spring ORM Dependency যুক্ত করা

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 Configuration (Hibernate কনফিগারেশন)

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 Hibernate Integration Configuration (Spring কনফিগারেশন)

Spring কনফিগারেশনে LocalSessionFactoryBean এবং HibernateTransactionManager ব্যবহার করে Hibernate কনফিগারেশন করা হয়।

Java Configuration (Annotation-based)

@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 ট্রানজেকশন ম্যানেজার তৈরি করে।

XML Configuration (XML-based)

<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 সেটআপ এবং ডেটাবেস কনফিগারেশন সম্পন্ন হয়।


৪. Model Class (Bean Class)

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 Layer (Data Access Object)

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

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);
    }
}

৭. Controller Layer

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 এর কনফিগারেশন আরও সহজ হয়ে যায় এবং প্রজেক্ট ডেভেলপমেন্ট দ্রুত সম্পন্ন করা সম্ভব হয়।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion