Hibernate এবং JPA (Java Persistence API) হল ডাটাবেসে ডাটা পেমেন্ট (storage/retrieval) এবং ট্রানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত দুইটি গুরুত্বপূর্ণ প্রযুক্তি। Hibernate একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, যা জাভা অবজেক্টগুলোকে ডাটাবেস টেবিলের সাথে ম্যাপিং করতে সহায়তা করে। JPA হল একটি স্ট্যান্ডার্ড স্পেসিফিকেশন যা ORM-এর সাথে কাজ করার জন্য একটি প্রমিত ইন্টারফেস প্রদান করে। স্প্রিং এমভিসি ফ্রেমওয়ার্কের সাথে Hibernate/JPA ইন্টিগ্রেট করার মাধ্যমে আপনি ডাটাবেস অপারেশনগুলো সহজভাবে পরিচালনা করতে পারেন।
এই গাইডে আমরা দেখব কিভাবে Spring MVC ফ্রেমওয়ার্ককে Hibernate বা JPA এর সাথে ইন্টিগ্রেট করা যায়। এতে ডাটাবেসের সাথে CRUD অপারেশন (Create, Read, Update, Delete) করার প্রক্রিয়া সহজ এবং মডুলার হবে।
প্রথমে, web.xml
ফাইলে DispatcherServlet কনফিগার করা হয়, যা সমস্ত HTTP রিকোয়েস্ট গ্রহণ করে এবং সঠিক কন্ট্রোলার মেথডে পাঠায়।
<web-app>
<!-- DispatcherServlet configuration -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
স্প্রিং এর LocalSessionFactoryBean
এবং JpaTransactionManager
এর মাধ্যমে Hibernate এবং JPA কনফিগার করা হয়।
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example")
@EnableJpaRepositories(basePackages = "com.example.repository")
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/mydb");
dataSource.setUsername("user");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setPackagesToScan("com.example.model");
factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factoryBean.setJpaProperties(hibernateProperties());
return factoryBean;
}
@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.hbm2ddl.auto", "update");
return properties;
}
}
DataSource
: ডাটাবেসের সংযোগের জন্য কনফিগারেশন।LocalContainerEntityManagerFactoryBean
: JPA EntityManagerFactory কনফিগারেশন।JpaTransactionManager
: ট্রানজেকশন ম্যানেজমেন্ট।একটি Entity ক্লাস তৈরি করা হবে যা ডাটাবেস টেবিলের সাথে মডেল ডাটা ম্যাপ করবে। JPA অ্যানোটেশন ব্যবহার করে Entity ক্লাস তৈরি করা হবে।
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Constructor, Getters, Setters
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
এখানে @Entity
এবং @Table
অ্যানোটেশন ব্যবহার করে User
ক্লাসটি একটি ডাটাবেস টেবিলের সাথে ম্যাপিং করা হয়েছে। @Id
এবং @GeneratedValue
অ্যানোটেশন দ্বারা প্রাইমারি কী এবং অটোমেটিক ভ্যালু জেনারেশন কনফিগার করা হয়েছে।
Spring MVC কন্ট্রোলার ক্লাস তৈরি করে ডাটাবেস অপারেশনগুলো পরিচালনা করা হবে। এখানে একটি উদাহরণ দেওয়া হলো, যেখানে CRUD (Create, Read, Update, Delete) অপারেশন করা হবে।
@Controller
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
// Create a new user
@PostMapping("/create")
public String createUser(@RequestParam String name, @RequestParam String email) {
User user = new User(name, email);
userRepository.save(user);
return "redirect:/users/list";
}
// Retrieve all users
@GetMapping("/list")
public String getAllUsers(Model model) {
List<User> users = userRepository.findAll();
model.addAttribute("users", users);
return "userList"; // Returns a view named 'userList.jsp'
}
// Retrieve a single user by ID
@GetMapping("/{id}")
public String getUserById(@PathVariable Long id, Model model) {
Optional<User> user = userRepository.findById(id);
if (user.isPresent()) {
model.addAttribute("user", user.get());
return "userDetails"; // Returns a view named 'userDetails.jsp'
}
return "error"; // If user not found
}
// Update user
@PostMapping("/update/{id}")
public String updateUser(@PathVariable Long id, @RequestParam String name, @RequestParam String email) {
Optional<User> userOptional = userRepository.findById(id);
if (userOptional.isPresent()) {
User user = userOptional.get();
user.setName(name);
user.setEmail(email);
userRepository.save(user);
return "redirect:/users/list";
}
return "error";
}
// Delete user
@GetMapping("/delete/{id}")
public String deleteUser(@PathVariable Long id) {
userRepository.deleteById(id);
return "redirect:/users/list";
}
}
ব্যাখ্যা:
@Autowired
: এটি Spring দ্বারা UserRepository
ইনজেক্ট করার জন্য ব্যবহৃত।@PostMapping
: নতুন ইউজার তৈরি এবং ইউজার আপডেটের জন্য POST রিকোয়েস্ট।@GetMapping
: ইউজার লিস্ট এবং ইউজারের ডিটেইলস দেখানোর জন্য GET রিকোয়েস্ট।এখন, JSP ফাইলগুলো তৈরি করে কন্ট্রোলার থেকে পাঠানো ডাটা প্রদর্শন করা হবে।
userList.jsp (JSP ফাইল):
<html>
<body>
<h2>User List</h2>
<ul>
<c:forEach var="user" items="${users}">
<li>${user.name} - ${user.email}
<a href="/users/${user.id}">Details</a>
<a href="/users/delete/${user.id}">Delete</a>
</li>
</c:forEach>
</ul>
</body>
</html>
userDetails.jsp (JSP ফাইল):
<html>
<body>
<h2>User Details</h2>
<p>Name: ${user.name}</p>
<p>Email: ${user.email}</p>
</body>
</html>
Spring Java configuration, Hibernate/JPA কনফিগারেশন, এবং ট্রানজেকশন ম্যানেজমেন্ট যোগ করার জন্য AppConfig
ক্লাসটি ব্যবহার করা হয়েছে।
Spring MVC এবং Hibernate/JPA এর মধ্যে ইন্টিগ্রেশন ওয়েব অ্যাপ্লিকেশনের ডেটা প persist করতে এবং বিজনেস লজিককে ম্যানেজ করতে সাহায্য করে। Hibernate হল একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, যা জাভা অবজেক্টগুলোকে রিলেশনাল ডেটাবেসে মেপ করে। JPA (Java Persistence API) একটি স্পেসিফিকেশন যা ডেটাবেসে পাসওয়ার্ড সংরক্ষণ এবং অ্যাক্সেস করতে ব্যবহৃত হয় এবং Hibernate এর মাধ্যমে এই স্পেসিফিকেশন ইমপ্লিমেন্ট করা হয়।
Spring MVC এবং Hibernate/JPA ইন্টিগ্রেট করার মাধ্যমে আপনি একটি পরিষ্কার, স্কেলেবল, এবং রক্ষণাবেক্ষণযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন। Hibernate/JPA ব্যবহার করে আপনি ডেটাবেস অপারেশন সহজে পরিচালনা করতে পারেন।
Spring MVC এ Hibernate/JPA এর ইন্টিগ্রেশন সাধারণত @Entity, @Repository, @Service, এবং @Controller এনোটেশন দিয়ে সম্পন্ন করা হয়।
প্রথমেই আপনাকে Spring MVC এবং Hibernate/JPA এর জন্য প্রয়োজনীয় ডিপেন্ডেন্সি pom.xml
এ যোগ করতে হবে।
<dependencies>
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.15</version>
</dependency>
<!-- Hibernate and JPA Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
</dependency>
<!-- Database (H2 in-memory database for testing) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<!-- Spring Boot Starter for Thymeleaf (Optional for View Rendering) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Spring Boot Starter for Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Spring Boot এর সাথে Hibernate/JPA ব্যবহার করলে, application.properties
বা application.yml
ফাইলে ডেটাবেস এবং JPA কনফিগারেশন করতে হয়।
# DataSource Configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
# Hibernate/JPA Configuration
spring.jpa.hibernate.ddl-auto=update # auto, validate, update, create-drop
spring.jpa.show-sql=true # Show SQL queries in the console
spring.jpa.properties.hibernate.format_sql=true
# Enable H2 Console for Testing
spring.h2.console.enabled=true
ddl-auto=update
: এটি Hibernate কে ডাটাবেস স্কিমা আপডেট করার জন্য নির্দেশ দেয়।show-sql=true
: Hibernate এর দ্বারা পরিচালিত SQL কোড কনসোলে দেখাবে।spring.h2.console.enabled=true
: H2 কনসোল UI অ্যাক্সেস করতে পারে।Hibernate/JPA তে ডেটাবেস টেবিলের সাথে সম্পর্কিত ক্লাসগুলোকে Entity হিসাবে চিহ্নিত করা হয়। আপনি @Entity এবং @Table এনোটেশন ব্যবহার করে এটি করতে পারেন।
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getter and Setter Methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
এখানে:
Spring Data JPA ব্যবহার করলে, আপনি JpaRepository বা CrudRepository ব্যবহার করে রেপোজিটরি তৈরি করতে পারেন, যা ডেটাবেস অপারেশনগুলো অটোমেটিকভাবে ম্যানেজ করে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// Custom queries can be defined here
User findByEmail(String email);
}
Spring MVC অ্যাপ্লিকেশনে, Service Layer হল বিজনেস লজিকের স্তর যেখানে ডেটাবেস অপারেশন পরিচালনা করা হয়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
public User getUserByEmail(String email) {
return userRepository.findByEmail(email);
}
}
এখানে:
UserRepository
অটোমেটিক ইনজেক্ট করে।Controller ইউজারের HTTP রিকোয়েস্ট গ্রহণ করে এবং Service Layer থেকে ডেটা প্রক্রিয়া করে ভিউতে পাঠায়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.ui.Model;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/userForm")
public String showForm(Model model) {
model.addAttribute("user", new User());
return "userForm"; // return the view name (userForm.jsp or userForm.html)
}
@PostMapping("/submitUser")
public String submitForm(@ModelAttribute User user, Model model) {
userService.saveUser(user);
model.addAttribute("message", "User saved successfully!");
return "userForm"; // Return success message to the same form
}
}
এখানে:
@ModelAttribute
দ্বারা User অবজেক্টে মান সেট করা হয় এবং ডেটাবেসে সংরক্ষণ করা হয়।Spring MVC এবং Hibernate/JPA এর ইন্টিগ্রেশন ওয়েব অ্যাপ্লিকেশনের ডেটাবেস সংক্রান্ত অপারেশনগুলি সহজ, কার্যকরী এবং স্কেলেবল করে তোলে। Spring MVC কন্ট্রোলার রিকোয়েস্ট গ্রহণ করে, Service Layer ডেটা প্রক্রিয়া করে এবং Hibernate/JPA ডেটাবেসের সাথে যোগাযোগ করে। এটি একটি মডুলার এবং পরিষ্কার আর্কিটেকচার তৈরি করে, যা কোড রক্ষণাবেক্ষণকে সহজ করে তোলে।
Spring Framework-এর মধ্যে @Entity, @Repository এবং @Transactional অ্যানোটেশনগুলো ব্যবহৃত হয় ডেটাবেস সম্পর্কিত কাজগুলো পরিচালনা করতে। এই অ্যানোটেশনগুলো Spring Data JPA বা অন্যান্য ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের সাথে কাজ করে এবং ডেটাবেসের সাথে ইন্টারঅ্যাকশন সহজ করে তোলে। নিচে প্রতিটি অ্যানোটেশন কী এবং কীভাবে ব্যবহৃত হয় তা বিস্তারিতভাবে আলোচনা করা হলো।
@Entity অ্যানোটেশনটি JPA (Java Persistence API)-এর একটি গুরুত্বপূর্ণ অংশ। এটি ব্যবহার করে আপনি একটি জাভা ক্লাসকে একটি Entity হিসেবে চিহ্নিত করেন, যা ডেটাবেসের টেবিলের সাথে ম্যাপ হবে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
ব্যাখ্যা:
@Entity
: এটি Employee ক্লাসটিকে ডেটাবেস টেবিলের প্রতিনিধিত্বকারী ক্লাস হিসেবে চিহ্নিত করেছে।@Id
: এটি Employee ক্লাসের প্রাইমারি কী চিহ্নিত করে, যা ডেটাবেস টেবিলের প্রতিটি রেকর্ডকে এককভাবে চিহ্নিত করবে।@Repository অ্যানোটেশনটি Spring Data JPA বা Hibernate-এর সাথে ব্যবহৃত হয়। এটি Data Access Object (DAO) হিসেবে কাজ করে এবং ডেটাবেসের সাথে ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়। Spring-এ @Repository অ্যানোটেশনটি @Component অ্যানোটেশনের মতোই কাজ করে, তবে এটি বিশেষভাবে Exception Translation এর জন্য ব্যবহৃত হয়, অর্থাৎ ডেটাবেস সম্পর্কিত ত্রুটিগুলি Spring’s DataAccessException-এ রূপান্তরিত হয়।
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
// Custom queries (if any)
Employee findByName(String name);
}
ব্যাখ্যা:
@Repository
: এটি EmployeeRepository ইন্টারফেসটিকে একটি Spring Bean হিসাবে চিহ্নিত করে, যা ডেটাবেস থেকে Employee অবজেক্টসের ডেটা পরিচালনা করবে।@Transactional অ্যানোটেশনটি Spring Framework এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা ট্রানজ্যাকশন ব্যবস্থাপনা করতে ব্যবহৃত হয়। এটি আপনাকে একাধিক ডেটাবেস অপারেশন (যেমন, ইনসার্ট, আপডেট, ডিলিট) একসাথে সমাপ্ত বা বাতিল (commit/rollback) করতে সাহায্য করে।
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
@Transactional
public void updateEmployeeDepartment(Long employeeId, String newDepartment) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new RuntimeException("Employee not found"));
employee.setDepartment(newDepartment);
employeeRepository.save(employee);
}
}
ব্যাখ্যা:
@Transactional
: এটি updateEmployeeDepartment মেথডে ব্যবহার করা হয়েছে, যার মানে হচ্ছে যদি কোনো একটি অপারেশন ব্যর্থ হয় (যেমন, employeeRepository.save(employee)
), তাহলে পুরো ট্রানজ্যাকশনটি রোলব্যাক হবে এবং ডেটাবেসে কোনো পরিবর্তন হবে না।এই অ্যানোটেশনগুলো একসাথে ব্যবহৃত হলে, Spring অ্যাপ্লিকেশনটি ডেটাবেসের সাথে সহজে যোগাযোগ করতে পারে এবং একটি কার্যকরী ট্রানজ্যাকশন সিস্টেম প্রদান করে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.springframework.data.jpa.repository.JpaRepository;
@Entity
public class Employee {
@Id
private Long id;
private String name;
private String department;
// Getters and Setters
}
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
Employee findByName(String name);
}
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
@Transactional
public void updateEmployeeDepartment(Long employeeId, String newDepartment) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(() -> new RuntimeException("Employee not found"));
employee.setDepartment(newDepartment);
employeeRepository.save(employee);
}
}
ব্যাখ্যা:
JpaRepository
থেকে ইনহেরিট করে এবং ডেটাবেসের CRUD অপারেশন সরবরাহ করে।@Transactional
ব্যবহার করা হয়েছে, যাতে সমস্ত ডেটাবেস অপারেশন এক ট্রানজ্যাকশনে সম্পন্ন হয়।এই তিনটি অ্যানোটেশন একসাথে ব্যবহার করে আপনি Spring অ্যাপ্লিকেশন তৈরি করতে পারেন যা কার্যকরীভাবে ডেটাবেসের সাথে যোগাযোগ করে এবং ট্রানজ্যাকশন নিরাপত্তা নিশ্চিত করে।
Spring MVC এবং Hibernate/JPA একসাথে ব্যবহার করলে আপনি একটি শক্তিশালী এবং স্কেলেবল ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যা ডাটাবেসে ডেটা সংরক্ষণ, আপডেট এবং পরিচালনা করতে সক্ষম। Hibernate/JPA ডেটাবেসের সাথে যোগাযোগের জন্য একটি শক্তিশালী ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক, এবং Spring MVC এর মাধ্যমে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা হয়।
এই গাইডে, আমরা Spring MVC এবং Hibernate/JPA কিভাবে একত্রে ব্যবহার করতে হয় তা দেখব।
প্রথমে আপনার pom.xml
ফাইলে Spring MVC এবং Hibernate/JPA ডিপেনডেন্সি যুক্ত করতে হবে:
<dependencies>
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Hibernate ORM (JPA implementation) -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<!-- Database (H2 example, replace with your own DB) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
এখানে:
spring-boot-starter-web
Spring MVC-এর জন্য ব্যবহৃত হয়।spring-boot-starter-data-jpa
JPA এবং Hibernate ব্যবহারের জন্য প্রয়োজনীয় ডিপেনডেন্সি।hibernate-core
Hibernate এর জন্য ব্যবহৃত হয়।h2
ডাটাবেসের জন্য একটি সাধারণ ইন-মেমরি ডাটাবেস। আপনি MySQL বা PostgreSQL ব্যবহার করতে পারেন।application.properties
ফাইলে Hibernate/JPA এর কনফিগারেশন করা হয়:
# DataSource Configuration (replace with your DB details)
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
# Enable Hibernate DDL (create/update) auto generation
spring.jpa.hibernate.ddl-auto=update
# Show SQL queries
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
এখানে:
spring.datasource.url
: ডাটাবেস URL।spring.jpa.hibernate.ddl-auto=update
: Hibernate ডাটাবেস স্কিমা স্বয়ংক্রিয়ভাবে আপডেট করবে।spring.jpa.show-sql=true
: SQL কুয়েরি কনসোল লোগে দেখাবে।Hibernate বা JPA ব্যবহার করার জন্য একটি Entity ক্লাস তৈরি করতে হবে যা ডাটাবেস টেবিলের প্রতিনিধিত্ব করবে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Constructors, Getters, Setters
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
এখানে:
@Entity
: এটি JPA Entity চিহ্নিত করার জন্য ব্যবহৃত হয়।@Id
: Primary Key হিসাবে সিলেক্ট করা ফিল্ড।@GeneratedValue(strategy = GenerationType.IDENTITY)
: Primary Key-র জন্য অটোমেটিক ভ্যালু জেনারেশন।Hibernate/JPA এর সাথে ডেটা অ্যাক্সেস লজিক হ্যান্ডল করতে DAO ক্লাস তৈরি করা হয়। আপনি Spring Data JPA এর JpaRepository
ইন্টারফেস ব্যবহার করতে পারেন।
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// Custom query methods can be added here, if needed
}
এখানে:
JpaRepository<User, Long>
: User
Entity এর জন্য CRUD অপারেশন সম্পাদন করে।Spring MVC কন্ট্রোলার ব্যবহার করে আপনি HTTP রিকোয়েস্টগুলি হ্যান্ডল করতে পারেন এবং জাভা অবজেক্টকে ভিউ তে রিটার্ন করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
// Display all users
@GetMapping("/list")
public String getAllUsers(Model model) {
model.addAttribute("users", userRepository.findAll());
return "userList"; // userList.jsp or userList.html
}
// Add new user
@PostMapping("/add")
public String addUser(User user) {
userRepository.save(user);
return "redirect:/user/list"; // After adding, redirect to the user list
}
}
এখানে:
@GetMapping("/list")
: সকল ইউজার ডেটা userRepository.findAll()
দিয়ে ডাটাবেস থেকে নিয়ে আসে এবং userList
ভিউতে পাঠানো হয়।@PostMapping("/add")
: নতুন ইউজার ডেটা userRepository.save()
দিয়ে ডাটাবেসে সেভ করা হয়।Spring MVC তে ভিউ তৈরি করতে JSP বা Thymeleaf ব্যবহার করা যেতে পারে।
<!DOCTYPE html>
<html>
<head>
<title>User List</title>
</head>
<body>
<h2>User List</h2>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
<c:forEach var="user" items="${users}">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Spring MVC এবং Hibernate/JPA এর ইন্টিগ্রেশন একটি খুব শক্তিশালী ও মডুলার অ্যাপ্লিকেশন তৈরি করতে সহায়ক। এই উদাহরণে, আমরা দেখলাম কীভাবে Spring MVC কন্ট্রোলার এবং Hibernate/JPA ডেটা অ্যাক্সেস লেয়ার ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা যেতে পারে। এছাড়া, JPA Repository ব্যবহারের মাধ্যমে CRUD অপারেশনগুলি খুব সহজভাবে হ্যান্ডল করা যায়, এবং Spring MVC দিয়ে ইউজার ইন্টারফেস তৈরি করা হয়।
Read more