Struts 2 এবং Hibernate একসাথে ব্যবহৃত হলে একটি শক্তিশালী এবং স্কেলেবল Java-based web application তৈরি করা সম্ভব। Struts 2 হল একটি MVC (Model-View-Controller) ফ্রেমওয়ার্ক, যা UI এবং business logic আলাদা করতে সহায়ক, এবং Hibernate একটি শক্তিশালী Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক, যা ডাটাবেসের সাথে অবজেক্ট মডেল ইন্টিগ্রেট করার কাজ করে। তাদের সমন্বয়ে, আপনি একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন যেখানে ডাটাবেস অপারেশনগুলো Hibernate দ্বারা পরিচালিত হবে এবং ইউজার ইন্টারফেস Struts 2 দ্বারা হ্যান্ডল হবে।
Struts 2 এবং Hibernate Integration এর সুবিধা:
- Separation of Concerns (SoC): Struts 2 আপনার অ্যাপ্লিকেশনের UI এবং Business Logic আলাদা করে দেয়, আর Hibernate ডাটাবেসের কাজ সহজ করে দেয়।
- Automated Mapping: Hibernate ডাটাবেস টেবিলের সাথে জাভা ক্লাস মডেলগুলিকে স্বয়ংক্রিয়ভাবে ম্যাপ করে।
- Database Independence: Hibernate আপনাকে একাধিক ডাটাবেসের সাথে কাজ করার জন্য একটি সাধারণ API প্রদান করে।
এখানে, আমরা Struts 2 এবং Hibernate এর একটি সাধারণ ইন্টিগ্রেশন উদাহরণ দেখব।
Step-by-Step Struts 2 এবং Hibernate Integration
১. Maven Dependency Configuration (pom.xml)
প্রথমেই, আপনি Maven ব্যবহার করে Struts 2 এবং Hibernate এর ডিপেনডেন্সি আপনার pom.xml ফাইলে যুক্ত করতে হবে।
<dependencies>
<!-- Struts 2 Dependencies -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<!-- Hibernate Dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.30.Final</version>
</dependency>
<!-- Hibernate Validator Dependency -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
<!-- JDBC Driver (For MySQL as an example) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
এটি Struts 2 এবং Hibernate এর প্রয়োজনীয় লাইব্রেরি যুক্ত করবে।
২. Hibernate Configuration File (hibernate.cfg.xml)
Hibernate ব্যবহার করার জন্য আপনাকে একটি hibernate.cfg.xml কনফিগারেশন ফাইল তৈরি করতে হবে, যা ডাটাবেসের কনফিগারেশন সেট করবে।
<!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</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">your_password</property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- Specify dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</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>
<!-- Automatically validate mappings -->
<property name="hibernate.validate">true</property>
</session-factory>
</hibernate-configuration>
এখানে ডাটাবেসের জন্য MySQL ব্যবহার করা হয়েছে, এবং ডাটাবেসের কানেকশন স্ট্রিং, ইউজারনেম এবং পাসওয়ার্ড কনফিগার করা হয়েছে।
৩. Hibernate Entity Class (POJO)
এখন, আপনাকে Hibernate Entity ক্লাস তৈরি করতে হবে যা ডাটাবেস টেবিলের সাথে ম্যাপ করবে। উদাহরণস্বরূপ, একটি User টেবিলের জন্য User ক্লাস তৈরি করা হবে।
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
public int getId() {
return id;
}
public void setId(int 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 অ্যানোটেশনটি Hibernate কে জানিয়ে দেয় যে এটি একটি Entity ক্লাস এবং @Id অ্যানোটেশনটি id ফিল্ডটিকে প্রাইমারি কী হিসাবে চিহ্নিত করে।
৪. Struts 2 Action Class
এখন আমরা একটি Struts 2 Action Class তৈরি করব যা Hibernate-এর মাধ্যমে ডেটাবেসে User তথ্য সেভ করবে।
import com.opensymphony.xwork2.ActionSupport;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UserAction extends ActionSupport {
private String name;
private String email;
@Override
public String execute() {
// Hibernate configuration
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class).buildSessionFactory();
// Create session
Session session = factory.getCurrentSession();
try {
// Create a new User object
User user = new User();
user.setName(name);
user.setEmail(email);
// Start a transaction
session.beginTransaction();
// Save the User object
session.save(user);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
return SUCCESS;
}
// Getters and Setters
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;
}
}
এখানে UserAction ক্লাসে Hibernate ব্যবহার করে User তথ্য ডাটাবেসে সেভ করা হচ্ছে।
৫. struts.xml Configuration
struts.xml ফাইলে UserAction অ্যাকশনটি কনফিগার করা হবে।
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="saveUser" class="com.example.UserAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
৬. JSP Page (Input Form)
এখন, একটি JSP ফর্ম তৈরি করা হবে, যেখানে ইউজার তার তথ্য প্রবেশ করাবে।
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<h2>User Form</h2>
<s:form action="saveUser">
<s:textfield name="name" label="Name" />
<s:textfield name="email" label="Email" />
<s:submit value="Save User" />
</s:form>
</body>
</html>
সারাংশ
Struts 2 এবং Hibernate একত্রে ব্যবহার করার মাধ্যমে আপনি একটি শক্তিশালী, স্কেলেবল, এবং সহজে রক্ষণাবেক্ষণযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন। Hibernate ডাটাবেসের সাথে অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) করে এবং Struts 2 UI এবং অ্যাকশন লজিক আলাদা করে, যা অ্যাপ্লিকেশনের গঠনকে আরও পরিষ্কার এবং কার্যকরী করে তোলে। Struts 2 এবং Hibernate ইন্টিগ্রেশন ব্যবহারে action class, hibernate configuration, JSP forms এবং struts.xml configuration যথাযথভাবে কনফিগার করার মাধ্যমে ডেটাবেস অপারেশনগুলো সহজভাবে করা সম্ভব।
Hibernate হল একটি ওপেন সোর্স Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা জাভা অ্যাপ্লিকেশনে ডেটাবেস এবং অবজেক্ট মধ্যে সম্পর্ক তৈরি করার জন্য ব্যবহৃত হয়। Hibernate ORM ফ্রেমওয়ার্ক ডেটাবেসে অবজেক্ট মডেলকে ম্যাপ করতে এবং ডেটাবেসের সাথে ডেটা পরিচালনা করতে সহায়ক হয়।
Struts 2-এর সঙ্গে Hibernate ইন্টিগ্রেট করা হয়, যাতে ডেটাবেস অপারেশনগুলি যেমন সেভ, আপডেট, ডিলিট, সিলেক্ট ইত্যাদি সহজে করা যায়। Hibernate ORM এবং Struts 2 এর ইন্টিগ্রেশন ডেটাবেস অ্যাক্সেস কোডকে সরল এবং উন্নত করে, যার ফলে ডেভেলপমেন্ট সময় কমে এবং অ্যাপ্লিকেশনটির স্কেলেবিলিটি বাড়ে।
Hibernate এবং ORM (Object-Relational Mapping) কী?
Hibernate ORM
Hibernate একটি শক্তিশালী জাভা ফ্রেমওয়ার্ক যা JDBC (Java Database Connectivity) এর পরিবর্তে Object-Relational Mapping (ORM) পদ্ধতি ব্যবহার করে ডেটাবেসের সঙ্গে যোগাযোগ করে। ORM একটি প্রক্রিয়া যেখানে অবজেক্ট এবং ডেটাবেস টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করা হয়। এটি জাভা অবজেক্টগুলি (যেমন, ক্লাস) ডেটাবেস টেবিলগুলির সারি (rows) এ ম্যাপ করে।
ORM (Object-Relational Mapping)
Object-Relational Mapping (ORM) হল এমন একটি পদ্ধতি যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) মডেলকে রিলেশনাল ডেটাবেসে রূপান্তরিত করে। এতে অবজেক্ট ফিল্ডগুলির মান ডেটাবেস টেবিলের কলামগুলোতে স্টোর হয়।
Hibernate ORM ফ্রেমওয়ার্কে অবজেক্টকে একটি Entity হিসাবে ম্যাপ করা হয় এবং Hibernate স্বয়ংক্রিয়ভাবে এই Entity অবজেক্টের ডেটাবেস টেবিলের সঙ্গের সম্পর্ক বজায় রাখে।
Struts 2 এবং Hibernate Integration
Struts 2 এর সঙ্গে Hibernate ইন্টিগ্রেশন ডেটা অপারেশনগুলি (ডেটা ইনসার্ট, আপডেট, ডিলিট, সিলেক্ট) কার্যকরভাবে পরিচালনা করার জন্য অত্যন্ত সুবিধাজনক। Hibernate ব্যবহার করে ডেটাবেস সম্পর্কিত কাজ যেমন CRUD (Create, Read, Update, Delete) অপারেশনগুলি খুব সহজে সম্পন্ন করা যায়। এই ইন্টিগ্রেশন উন্নত ডেটাবেস অ্যাক্সেস, ডেটাবেস নির্ভরযোগ্যতা এবং পারফরম্যান্সের সুবিধা দেয়।
Struts 2 এবং Hibernate Integration এর ভূমিকা
- Data Persistence: Struts 2 ব্যবহারকারীর ইনপুট গ্রহণ করে এবং Hibernate ডেটাবেসে সেই ডেটা পersist করে। Hibernate ডেটাবেসের মধ্যে অবজেক্ট ডেটা সেভ, রিট্রিভ, আপডেট এবং ডিলিট করার জন্য সুনির্দিষ্ট কোড জেনারেট করে।
- Simplified Database Access: Hibernate ব্যবহারকারীদের ডেটাবেস অ্যাক্সেস করতে SQL এর পরিবর্তে HQL (Hibernate Query Language) বা Criteria API ব্যবহার করার সুবিধা দেয়। এতে ডেটাবেস অপারেশনগুলোকে আরও সোজা ও পারফর্ম্যান্স উন্নত করা সম্ভব।
- Automatic Mapping: Hibernate এর মাধ্যমে অবজেক্ট ফিল্ড এবং ডেটাবেস টেবিলের কলামগুলোর মধ্যে স্বয়ংক্রিয় ম্যাপিং করা যায়। এতে ডেটাবেসের সঙ্গে যোগাযোগে সময় এবং কোড কমে আসে।
- Transaction Management: Hibernate স্বয়ংক্রিয়ভাবে ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করে, যার মাধ্যমে ডেটাবেসে অনেকগুলো পরিবর্তন একযোগে করা যায় এবং ট্রানজেকশন সঠিকভাবে সম্পন্ন হয়।
- Decoupling of Business Logic and Data Access Logic: Hibernate এবং Struts 2 এর ইন্টিগ্রেশন ডেটাবেস অ্যাক্সেস লজিক এবং বিজনেস লজিককে পৃথক রাখে, যাতে অ্যাপ্লিকেশনের রক্ষণাবেক্ষণ এবং পরবর্তী উন্নতি সহজ হয়।
Struts 2 এবং Hibernate Integration উদাহরণ
এখানে একটি সিম্পল উদাহরণ দেখানো হলো যেখানে Struts 2 ফ্রেমওয়ার্ক এবং Hibernate ব্যবহার করে একটি User অবজেক্টের তথ্য ডেটাবেসে ইনসার্ট করা হয়।
Step 1: Hibernate Entity Class (User.java)
package com.example.model;
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 int id;
private String username;
private String email;
// Getter and Setter methods
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
এখানে:
- User ক্লাসটি একটি Hibernate Entity হিসেবে চিহ্নিত করা হয়েছে, যা ডেটাবেস টেবিলের সমতুল্য।
Step 2: Hibernate Configuration (hibernate.cfg.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!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/yourDatabase</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>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</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.model.User"/>
</session-factory>
</hibernate-configuration>
এখানে:
- hibernate.cfg.xml ফাইলটি Hibernate কনফিগারেশন সেটআপ করে, যেখানে ডেটাবেস কানেকশন, ড্রাইভার, এবং অন্যান্য সেটিংস উল্লেখ করা হয়।
Step 3: Hibernate DAO Class (UserDao.java)
package com.example.dao;
import com.example.model.User;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UserDao {
public void saveUser(User user) {
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Save the User object
session.save(user);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে:
- UserDao ক্লাসে Hibernate ব্যবহার করে User অবজেক্ট ডেটাবেসে সেভ করা হচ্ছে।
- Session এবং Transaction ব্যবহৃত হয়েছে যাতে ডেটাবেসে সঠিকভাবে ইনপুট ইনসার্ট করা হয়।
Step 4: Struts 2 Action Class (UserAction.java)
package com.example.action;
import com.example.dao.UserDao;
import com.example.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String username;
private String email;
// Getter and Setter for username and email
@Override
public String execute() {
User user = new User();
user.setUsername(username);
user.setEmail(email);
// Save the user to database using Hibernate
UserDao userDao = new UserDao();
userDao.saveUser(user);
return SUCCESS;
}
}
এখানে:
- UserAction ক্লাসে User অবজেক্ট তৈরি করা হচ্ছে এবং সেই অবজেক্ট Hibernate দিয়ে ডেটাবেসে সেভ করা হচ্ছে।
Step 5: Struts 2 Configuration (struts.xml)
<struts>
<package name="default" extends="struts-default">
<action name="register" class="com.example.action.UserAction">
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
এখানে:
- register অ্যাকশন UserAction ক্লাসের execute() মেথডকে কল করবে।
সারাংশ
Struts 2 এবং Hibernate ইন্টিগ্রেশন ORM (Object-Relational Mapping) ব্যবহার করে ডেটাবেসের অবজেক্ট ডেটা হ্যান্ডলিং এবং ডেটাবেস অপারেশনগুলোকে আরও সহজ এবং দ্রুত করে তোলে। Hibernate জাভা অবজেক্টকে ডেটাবেস টেবিলের সাথে ম্যাপ করতে সাহায্য করে এবং Struts 2-এর সঙ্গে এই ইন্টিগ্রেশন সহজেই ডেটাবেসের CRUD অপারেশনগুলি কার্যকর করতে সক্ষম।
Struts 2 এবং Hibernate দুটি শক্তিশালী ফ্রেমওয়ার্ক। Struts 2 হল একটি ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক এবং Hibernate হল একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা ডাটাবেসের সাথে সম্পর্কিত কাজগুলো সহজ করে তোলে। যখন আপনি Struts 2 এবং Hibernate একত্রে ব্যবহার করেন, তখন আপনি একটি শক্তিশালী, স্কেলেবল এবং ডেটাবেস ড্রিভেন ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন। এই ইন্টিগ্রেশনের মাধ্যমে আপনি ফ্রন্টএন্ড (Struts 2) এবং ব্যাকএন্ড (Hibernate) সহজভাবে সংযুক্ত করতে পারবেন।
Struts 2 এবং Hibernate Integration এর জন্য প্রয়োজনীয় পদক্ষেপ
- Maven Dependencies যোগ করা
- Hibernate কনফিগারেশন করা
- Struts 2 Action ক্লাস তৈরি করা
- struts.xml কনফিগারেশন
- JSP পেজ তৈরি করা
১. Maven Dependencies যোগ করা
Hibernate এবং Struts 2 ইন্টিগ্রেট করার জন্য প্রথমে আপনাকে আপনার pom.xml ফাইলে প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<!-- Struts 2 Dependencies -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.20</version>
</dependency>
<!-- Hibernate Dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.30.Final</version>
</dependency>
<!-- Hibernate Validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
<!-- JDBC Driver -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
এখানে, Struts 2 এবং Hibernate এর প্রয়োজনীয় ডিপেনডেন্সি যোগ করা হয়েছে।
২. Hibernate কনফিগারেশন করা
Hibernate কনফিগারেশন ফাইলের মাধ্যমে ডেটাবেসের সাথে কানেকশন পরিচালনা করা হয়। সাধারণত hibernate.cfg.xml ফাইলে এটি কনফিগার করা হয়।
hibernate.cfg.xml:
<!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.HSQLDialect</property>
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.url">jdbc:hsqldb:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.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.HSQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</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>
<!-- Disable the second-level cache -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
</session-factory>
</hibernate-configuration>
এখানে, হাইবারনেটের JDBC কানেকশন সেটিংস, ডায়ালেক্ট, সেশন কনফিগারেশন এবং hibernate.hbm2ddl.auto সেট করা হয়েছে। আপনি আপনার ডাটাবেসের অ্যাক্সেস ডিটেইলস এখানে কনফিগার করবেন।
৩. Action ক্লাস তৈরি করা
Struts 2 অ্যাপ্লিকেশনগুলিতে Action ক্লাস ব্যবহার করে ব্যবসায়িক লজিক পরিচালনা করা হয়। Hibernate ব্যবহার করে ডেটা পরিচালনা করার জন্য Session ব্যবহার করা হয়।
UserAction.java (Action ক্লাস):
package com.example;
import com.opensymphony.xwork2.ActionSupport;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UserAction extends ActionSupport {
private String name;
private String email;
public String execute() {
// Hibernate session factory তৈরি করা
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
// Hibernate session তৈরি
Session session = factory.getCurrentSession();
try {
// নতুন User তৈরি করা
User user = new User(name, email);
// ট্রানজেকশন শুরু করা
session.beginTransaction();
// ডেটাবেসে ইউজার সেভ করা
session.save(user);
// ট্রানজেকশন কমিট করা
session.getTransaction().commit();
} finally {
factory.close();
}
return SUCCESS;
}
// Getter and Setter Methods
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;
}
}
ব্যাখ্যা:
- এখানে SessionFactory এবং Session ব্যবহার করে Hibernate এর মাধ্যমে ডেটা ডেভেলপমেন্ট করা হয়েছে।
- User নামে একটি ক্লাস ব্যবহার করে একটি নতুন User অবজেক্ট তৈরি করা হয়েছে এবং তারপর ডেটাবেসে সেভ করা হয়েছে।
৪. User Model Class তৈরি করা
User.java (Model Class):
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;
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getter and Setter Methods
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 এনোটেশন ব্যবহার করা হয়েছে যা Hibernate কে জানায় যে এটি একটি টেবিলকে রিপ্রেজেন্ট করে।
- @Id এনোটেশন ব্যবহার করা হয়েছে, যা Hibernate কে জানায় যে এটি টেবিলের প্রাইমারি কী।
৫. struts.xml কনফিগারেশন
struts.xml ফাইলটি অ্যাকশন এবং ভিউ রেজাল্টের জন্য কনফিগার করা হয়।
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="registerUser" class="com.example.UserAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
ব্যাখ্যা:
- name="registerUser": ইউজার যখন
/registerUserURL এক্সেস করবে, তখন UserAction ক্লাসেরexecute()মেথড কল হবে। - /success.jsp:
SUCCESSরিটার্ন হলে success.jsp পৃষ্ঠা রেন্ডার হবে।
৬. JSP পৃষ্ঠা তৈরি করা
registerUser.jsp (ফর্ম):
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<h2>User Registration</h2>
<s:form action="registerUser">
<s:textfield name="name" label="Name" />
<s:textfield name="email" label="Email" />
<s:submit value="Register" />
</s:form>
</body>
</html>
success.jsp (সাফল্য পৃষ্ঠা):
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<h2>User Registered Successfully!</h2>
</body>
</html>
সারাংশ
Struts 2 এবং Hibernate Integration হল একটি শক্তিশালী কম্বিনেশন যা আপনাকে MVC (Model-View-Controller) আর্কিটেকচারের মাধ্যমে Hibernate ORM ব্যবহার করে ডেটাবেসের সাথে কাজ করার সুবিধা দেয়। এখানে, Action ক্লাস ব্যবহার করে ডেটাবেসে ডেটা সেভ করা হয় এবং JSP পৃষ্ঠার মাধ্যমে ভিউ প্রদর্শিত হয়। Struts 2 ফ্রেমওয়ার্কে Hibernate কনফিগারেশন, Action ক্লাস, এবং struts.xml কনফিগারেশন করার মাধ্যমে সহজেই ডেটাবেস অপারেশন করা সম্ভব।
Struts 2 এবং Hibernate দুটি জনপ্রিয় Java ফ্রেমওয়ার্ক। Struts 2 হল একটি ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক যা MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে, এবং Hibernate হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়। Struts 2 এবং Hibernate একসাথে ব্যবহৃত হলে, আপনি খুব সহজে ডেটাবেস অপারেশন (যেমন ইনসার্ট, আপডেট, ডিলিট) পরিচালনা করতে পারেন, সেই সঙ্গে অ্যাপ্লিকেশনের লজিক ও ভিউ স্তরের কাজ আলাদা করতে পারেন।
এই টিউটোরিয়ালে আমরা Struts 2 এবং Hibernate এর ইন্টিগ্রেশন দেখাবো, যেখানে Struts 2 ব্যবহারকারী ইনপুট নেবে এবং সেই ইনপুট Hibernate ব্যবহার করে ডেটাবেসে সেভ করবে।
Struts 2 এবং Hibernate Integration এর স্টেপস
1. Hibernate কনফিগারেশন
প্রথমে, আপনাকে Hibernate কনফিগারেশন ফাইল তৈরি করতে হবে, যা Hibernate-এর সাথে ডেটাবেস সংযোগ স্থাপন করবে। এটি সাধারণত hibernate.cfg.xml ফাইলে থাকে।
hibernate.cfg.xml
<!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.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_database</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>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</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>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.format_sql">true</property>
<!-- Enable Hibernate second level cache -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
</session-factory>
</hibernate-configuration>
এই ফাইলে, Hibernate ডেটাবেসের সাথে সংযোগ করার জন্য প্রয়োজনীয় কনফিগারেশন এবং ড্রাইভার তথ্য দেওয়া হয়।
2. Hibernate Entity Class তৈরি করা
Hibernate এ ডেটাবেস টেবিলের সাথে সম্পর্কিত ক্লাস তৈরি করতে হয়। এটি @Entity অ্যানোটেশন দিয়ে চিহ্নিত করা হয় এবং এতে @Id ব্যবহার করা হয় যাতে Hibernate বুঝতে পারে কোন ফিল্ডটি প্রাইমারি কি।
User.java (Entity Class)
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private int id;
private String name;
private String email;
// Getter and Setter Methods
public int getId() {
return id;
}
public void setId(int 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;
}
}
এই ক্লাসটি User নামক একটি Entity তৈরি করছে, যা ডেটাবেসে একটি User টেবিলের সাথে সম্পর্কিত।
3. Hibernate DAO (Data Access Object) তৈরি করা
Hibernate ব্যবহার করে ডেটাবেস অপারেশন পরিচালনা করতে DAO ক্লাস তৈরি করা হয়। এই ক্লাসটি ডেটাবেসে ইনপুট সেভ, আপডেট, ডিলিট ইত্যাদি অপারেশন সম্পাদন করবে।
UserDao.java (DAO Class)
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class UserDao {
private static SessionFactory factory;
static {
factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(User.class).buildSessionFactory();
}
public void saveUser(User user) {
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, saveUser() মেথডটি একটি User অবজেক্ট গ্রহণ করে এবং সেটি ডেটাবেসে সেভ করে।
4. Struts 2 Action Class তৈরি করা
এখন, Struts 2 অ্যাকশন ক্লাস তৈরি করতে হবে, যা ফর্ম থেকে ডেটা গ্রহণ করবে এবং UserDao এর মাধ্যমে সেই ডেটা ডেটাবেসে সেভ করবে।
UserAction.java (Struts 2 Action Class)
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
private String name;
private String email;
// Getter and Setter
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
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;
}
public String execute() {
user = new User();
user.setName(name);
user.setEmail(email);
UserDao dao = new UserDao();
dao.saveUser(user);
return SUCCESS;
}
}
এখানে, UserAction ক্লাস ফর্ম থেকে name এবং email গ্রহণ করে এবং UserDao ব্যবহার করে ডেটাবেসে সেভ করে।
5. struts.xml কনফিগারেশন
অ্যাকশন এবং রেজাল্ট কনফিগার করার জন্য struts.xml ফাইল কনফিগার করা হয়।
struts.xml
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="userSave" class="com.example.UserAction">
<result name="success">/WEB-INF/content/success.jsp</result>
<result name="input">/WEB-INF/content/input.jsp</result>
</action>
</package>
</struts>
এখানে, userSave অ্যাকশনটি UserAction ক্লাসের সাথে যুক্ত, এবং সফল হলে success.jsp এবং ইনপুট হলে input.jsp রিডিরেক্ট হবে।
6. JSP পেজ তৈরি করা
JSP পেজ তৈরি করতে হবে, যেখানে ব্যবহারকারী তাদের ইনপুট প্রদান করবে এবং সেই ইনপুট Struts 2 অ্যাকশনের মাধ্যমে ডেটাবেসে সেভ হবে।
input.jsp (ফর্ম)
<html>
<body>
<h1>Enter User Information</h1>
<s:form action="userSave" method="post">
<s:textfield label="Name" name="name"/>
<s:textfield label="Email" name="email"/>
<s:submit value="Save"/>
</s:form>
</body>
</html>
এখানে, <s:form> ট্যাগ ব্যবহার করা হয়েছে, যাতে ব্যবহারকারী name এবং email ইনপুট করতে পারেন।
success.jsp (সাফল্য পেজ)
<html>
<body>
<h1>User saved successfully!</h1>
</body>
</html>
এটি একটি সাফল্য পেজ, যা ফাইলটি সেভ হওয়ার পরে প্রদর্শিত হবে।
উপসংহার
Struts 2 এবং Hibernate Integration খুবই কার্যকরী একটি পদ্ধতি, যা আপনাকে MVC আর্কিটেকচারে ডেটাবেস অপারেশন সম্পাদন করতে সহায়তা করে। Struts 2 অ্যাকশন ক্লাসের মাধ্যমে ব্যবহারকারীর ইনপুট গ্রহণ করা হয় এবং Hibernate ব্যবহার করে ডেটাবেসে সেই ডেটা সেভ করা হয়। Hibernate ORM ব্যবহারের মাধ্যমে আপনি সহজে জাভা অবজেক্টের সাথে ডেটাবেস টেবিল ম্যাপিং করতে পারেন, এবং Struts 2 এর মাধ্যমে আপনার অ্যাপ্লিকেশনের লজিক এবং ভিউ আলাদা রাখতে পারেন।
Read more