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;
}
}
এখানে:
LocalSessionFactoryBeanHibernate session factory তৈরি করে।hibernateTransactionManagerHibernate ট্রানজেকশন ম্যানেজার তৈরি করে।
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 এর কনফিগারেশন আরও সহজ হয়ে যায় এবং প্রজেক্ট ডেভেলপমেন্ট দ্রুত সম্পন্ন করা সম্ভব হয়।
Read more