Spring ORM এর মাধ্যমে ডেটাবেস অপারেশনগুলো পরীক্ষা (Testing) করার জন্য H2 Database একটি ভালো বিকল্প। H2 হল একটি ইন-মেমরি ডেটাবেস যা দ্রুত এবং হালকা। এটি স্প্রিং অ্যাপ্লিকেশনের টেস্টিং পরিবেশে খুবই উপকারী, কারণ এটি কোনও স্থায়ী ডেটাবেসে ডেটা সংরক্ষণ না করে শুধুমাত্র পরীক্ষা চলাকালীন ডেটাবেস তৈরি করে।
H2 Database কনফিগারেশন এবং Spring ORM Testing এর জন্য প্রয়োজনীয় ধাপসমূহ
১. Maven ডিপেনডেন্সি যোগ করা
H2 Database এবং Spring Data JPA এর জন্য Maven pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
ব্যাখ্যা:
spring-boot-starter-data-jpa: Spring Data JPA ডিপেনডেন্সি।h2: H2 Database ডিপেনডেন্সি (এটি রানটাইমের জন্য ব্যবহৃত হবে)।spring-boot-starter-test: টেস্টিং লাইব্রেরি, যেমন JUnit এবং Mockito।
২. application.properties কনফিগারেশন
Spring Boot অ্যাপ্লিকেশনের জন্য application.properties ফাইলে H2 Database কনফিগার করুন।
# H2 Database configuration
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MYSQL
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# Hibernate settings
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
# H2 Console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
ব্যাখ্যা:
spring.datasource.url: H2 Database এর ইন-মেমরি URL।spring.jpa.hibernate.ddl-auto=create-drop: অ্যাপ্লিকেশন স্টার্ট হলে ডেটাবেস তৈরি করবে এবং বন্ধ হলে ড্রপ করবে।spring.h2.console.enabled=true: H2 এর কনসোল সক্রিয় করা, যাতে আপনি ব্রাউজারে H2 কনসোল অ্যাক্সেস করতে পারেন (যেমনhttp://localhost:8080/h2-console)।
৩. Entity ক্লাস তৈরি করা
স্প্রিং ORM এ টেস্টিং করার জন্য প্রথমে একটি Entity ক্লাস তৈরি করুন। নিচে একটি উদাহরণ দেওয়া হলো:
import jakarta.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
}
ব্যাখ্যা:
@Entity: Entity ক্লাসটি JPA Entity হিসেবে চিহ্নিত করে।@Idএবং@GeneratedValue: প্রাথমিক কী হিসাবেidব্যবহার করা হয়েছে এবং এটি অটোমেটিক্যালি বৃদ্ধি পাবে।
৪. Repository তৈরি করা
JPA Repository ইন্টারফেস তৈরি করুন যা ডেটাবেসের CRUD অপারেশন পরিচালনা করবে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
ব্যাখ্যা:
JpaRepository: Spring Data JPA এর মাধ্যমে ডেটাবেসের CRUD অপারেশন সহজে করা যায়।
৫. টেস্ট ক্লাস তৈরি করা
Spring Boot টেস্টিং করতে @SpringBootTest এবং @Autowired অ্যানোটেশন ব্যবহার করা হয়।
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testCreateAndFindUser() {
// Create a new user
User user = new User();
user.setName("John Doe");
user.setEmail("john@example.com");
// Save user to the database
User savedUser = userRepository.save(user);
// Verify that the user was saved correctly
assertNotNull(savedUser.getId());
assertEquals("John Doe", savedUser.getName());
assertEquals("john@example.com", savedUser.getEmail());
// Find user by ID
User foundUser = userRepository.findById(savedUser.getId()).orElse(null);
assertNotNull(foundUser);
assertEquals(savedUser.getId(), foundUser.getId());
}
}
ব্যাখ্যা:
@SpringBootTest: পুরো Spring Boot অ্যাপ্লিকেশন কনটেক্সট লোড করে, যাতে আমরা ইন-মেমরি H2 ডেটাবেসে টেস্ট চালাতে পারি।@Autowired:UserRepositoryকে ইনজেক্ট করা।@Transactional: প্রতিটি টেস্ট মেথডের পর ডেটাবেস রোলব্যাক করা হয়, যাতে টেস্টের পরে ডেটাবেসের অবস্থা অপরিবর্তিত থাকে।assertNotNullএবংassertEquals: টেস্টিং assertions যা যাচাই করে যে ডেটা সঠিকভাবে সংরক্ষিত এবং পুনরুদ্ধার হয়েছে।
৬. H2 কনসোল ব্যবহার
আপনি H2 কনসোল ব্যবহার করে ডেটাবেসের তথ্য দেখতে পারেন। http://localhost:8080/h2-console এ গিয়ে আপনি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারবেন।
সারাংশ
H2 Database ব্যবহার করে Spring ORM এর টেস্টিং অনেক সহজ এবং কার্যকরী। ইন-মেমরি ডেটাবেস ব্যবহার করে দ্রুত ডেটাবেস অপারেশন টেস্ট করা যায়, যেখানে ডেটাবেসে কোনো স্থায়ী পরিবর্তন ঘটবে না। Spring Boot এর সাথে H2 Database ইন্টিগ্রেট করে, আমরা খুব সহজেই স্প্রিং ORM অ্যাপ্লিকেশন টেস্ট করতে পারি এবং @SpringBootTest এর মাধ্যমে সম্পূর্ণ কনটেক্সট লোড করে CRUD অপারেশনগুলো টেস্ট করতে পারি।
Read more