H2 ডেটাবেস একটি ইন-মেমরি ডেটাবেস, যা সহজ এবং দ্রুত টেস্টিংয়ের জন্য আদর্শ। Spring JDBC এবং H2 ডেটাবেস একসাথে ব্যবহার করে আপনি টেস্টিং প্রক্রিয়া আরও কার্যকর করতে পারেন। এটি সহজেই ইন-মেমরি ডেটাবেস তৈরি করে, যেখানে ডেটা অস্থায়ীভাবে সংরক্ষিত হয় এবং অ্যাপ্লিকেশন বন্ধ হওয়ার সাথে সাথে ডেটা মুছে যায়।
H2 Database এবং Spring JDBC এর মাধ্যমে টেস্টিং করার ধাপসমূহ
ধাপ ১: Maven ডিপেনডেন্সি যোগ করা
Spring এবং H2 ডেটাবেস ব্যবহার করার জন্য নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependencies>
<!-- Spring JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.21</version>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>test</scope>
</dependency>
<!-- JUnit (Testing Framework) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
ধাপ ২: H2 ডেটাবেসের জন্য Spring Configuration তৈরি করা
Spring টেস্ট কনফিগারেশন তৈরি করুন, যেখানে H2 ডেটাবেস এবং JdbcTemplate কনফিগার করবেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
@Configuration
public class TestConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
ধাপ ৩: SQL Schema এবং ডেটা সেটআপ
schema.sql এবং data.sql ফাইল তৈরি করুন।
Spring Boot টেস্ট চলাকালীন এই ফাইলগুলো স্বয়ংক্রিয়ভাবে লোড করবে।
schema.sql:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
data.sql:
INSERT INTO employees (id, name, department) VALUES (1, 'John Doe', 'IT');
INSERT INTO employees (id, name, department) VALUES (2, 'Jane Smith', 'HR');
ধাপ ৪: টেস্টিং ক্লাস তৈরি করা
Spring টেস্টিং পরিবেশে H2 ডেটাবেস ব্যবহার করে টেস্টিং করার জন্য JUnit ব্যবহার করুন।
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest(classes = TestConfig.class)
public class EmployeeServiceTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void testFetchEmployees() {
// Fetch all employees
String query = "SELECT * FROM employees";
List<Map<String, Object>> employees = jdbcTemplate.queryForList(query);
// Verify the data
assertEquals(2, employees.size());
assertEquals("John Doe", employees.get(0).get("name"));
assertEquals("Jane Smith", employees.get(1).get("name"));
}
@Test
public void testAddEmployee() {
// Insert a new employee
String insertQuery = "INSERT INTO employees (id, name, department) VALUES (?, ?, ?)";
int rowsAffected = jdbcTemplate.update(insertQuery, 3, "Alice Brown", "Finance");
// Verify the data
assertEquals(1, rowsAffected);
// Fetch and verify
String fetchQuery = "SELECT * FROM employees WHERE id = ?";
Map<String, Object> employee = jdbcTemplate.queryForMap(fetchQuery, 3);
assertEquals("Alice Brown", employee.get("name"));
assertEquals("Finance", employee.get("department"));
}
}
Spring Boot-এর জন্য H2 ব্যবহার সহজীকরণ
Spring Boot টেস্টিংয়ের সময় schema.sql এবং data.sql ফাইলগুলো স্বয়ংক্রিয়ভাবে লোড করা যায়। এটির জন্য কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন নেই।
Application.properties:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
Spring Boot চালু হওয়ার সময় এটি H2 ডেটাবেস সেটআপ করবে এবং SQL স্ক্রিপ্টগুলো লোড করবে।
H2 Database Console ব্যবহার
টেস্ট চলাকালীন H2 ডেটাবেসের ডেটা দেখতে কনসোল ব্যবহার করতে পারেন।
Application.properties:
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
H2 কনসোল অ্যাক্সেস করতে ব্রাউজারে যান:
http://localhost:8080/h2-console
ড্রাইভার: org.h2.Driver
জড়ু URL: jdbc:h2:mem:testdb
H2 Database ব্যবহার করার সুবিধা
- ইন-মেমরি ডেটাবেস: দ্রুত এবং অস্থায়ী ডেটা ব্যবস্থাপনা।
- সহজ সেটআপ: Spring Boot বা Spring Framework এর সাথে সহজে ইন্টিগ্রেশন।
- ডেভেলপমেন্ট এবং টেস্টিং ফ্রেন্ডলি: ডেটাবেস ম্যানেজমেন্ট ছাড়াই টেস্টিং করা যায়।
- কনসোল সাপোর্ট: সহজে ডেটাবেস স্ট্রাকচার এবং ডেটা পরীক্ষা করা যায়।
উপসংহার
H2 ডেটাবেস Spring JDBC টেস্টিংয়ের জন্য একটি সহজ, দ্রুত এবং কার্যকর সমাধান। এটি ইন-মেমরি হওয়ায় টেস্টিংয়ের সময় কোনো স্থায়ী ডেটাবেসের প্রয়োজন হয় না। Spring Boot-এর সাহায্যে H2 ইন্টিগ্রেশন আরও সহজ এবং সময়সাশ্রয়ী হয়।
Read more