English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring 集成Hibernate

我们可以简单地将hibernate应用程序与spring应用程序集成。

在hibernate框架中,我们提供了所有功能数据库信息hibernate.cfg.xml文件。

但是,如果我们要将hibernate应用程序与spring集成在一起,则无需创建hibernate.cfg.xml文件。我们可以在applicationContext.xml文件中提供所有信息。

Spring框架具有休眠功能的优势

Spring框架提供了 HibernateTemplate 类,因此您无需执行太多步骤,例如创建Configuration,BuildSessionFactory,Session,开始和提交事务等。

因此 它节省了大量代码

不使用spring的理解问题:

下面的休眠代码让我们理解它:

    //创建配置
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    // إنشاء جسم SessionFactory
    SessionFactory factory = cfg.buildSessionFactory();  
      
    // إنشاء جسم الجلسة  
    Session session = factory.openSession();  
      
    // إنشاء جسم التزام  
    Transaction t = session.beginTransaction();  
          
    Employee e1 = new Employee(111, "arun", 40000);  
    session.persist(e1); // التمسك بالجسم  
      
    t.commit(); // إجراء التزام
    session.close();

كما ترون في الكود الفريد لـ Hibernate، يجب عليك اتباع العديد من الخطوات

حلول HibernateTemplate من Spring Framework:

الآن، لا تحتاج إلى تنفيذ الكثير من الخطوات. يمكنك ببساطة كتابة:

    Employee e1 = new Employee(111, "arun", 40000);  
    hibernateTemplate.save(e1);

طرق HibernateTemplate

دعونا نرى قائمة الطرق الشائعة لمسلسل HibernateTemplate

الطريقةالشرح
void persist(Object entity)التمسك بالجسم المحدد
Serializable save(Object entity)احتفظ بالجسم المحدد وعدد ID
void saveOrUpdate(Object entity)الاحتفاظ أو تحديث الجسم المحدد. إذا تم العثور على id، فإنه سيتم تحديث السجل، وإلا يتم حفظ السجل
void update(Object entity)تحديث الجسم المحدد
void delete(Object entity)حذف الجسم المحدد بناءً على id
Object get(Class entityClass, Serializable id)استرداد الأجسام المتركزة بناءً على id المحدد
Object load(Class entityClass, Serializable id)استرداد الأجسام المتركزة بناءً على id المحدد
List loadAll(Class entityClass)استرداد جميع الأ�체يات

الخطوات

دعونا نرى ما هي الخطوات البسيطة للدمج بين النوم والرباطات

إنشاء جدول في قاعدة البياناتهذا اختياري. إنشاء ملف applicationContext.xmlوهذا يحتوي على معلومات DataSource و SessionFactory وما إلى ذلك. إنشاء ملف Employee.java. إنشاء ملف employee.hbm.xml. إنشاء ملف EmployeeDao.java. إنشاء ملف InsertTest.java.

مثال على تكامل Hibernate و Spring

في هذا المثال، سنقوم بتكامل تطبيق Hibernate مع Spring. دعونا نرى مثال على تكامل Hibernate و Spring هيكل الدليل


1、إنشاء جدول في قاعدة البيانات

في هذا المثال، نستخدم Oracle كقاعدة بيانات، ولكن يمكنك استخدام أي قاعدة بيانات. دعونا ن 创建 جدول في قاعدة بيانات Oracle

CREATE TABLE  "EMP558" 
   (  "ID" NUMBER(10,0) NOT null ENABLE, 
  "NAME" VARCHAR2(255 CHAR), 
  "SALARY" float(126), 
   PRIMARY KEY ("ID") ENABLE
   )
/

2、Employee.java

هذا هو فئة POJO بسيطة. هنا، يستخدم ككائن مستدام Hibernate.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//getters and setters
}

3、employee.hbm.xml

هذا الملف الم映射 يحتوي على جميع معلومات الكائنات المستدامة.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.w3codebox.Employee" table="emp558">
          <id name="id">
          <generator class="assigned"></generator>
          </id>
          
          <property name="name"></property>
          <property name="salary"></property>
</class>
          
</hibernate-mapping>

4،EmployeeDao.java

This is a class that uses HibernateTemplate Java class for class method to persistently save Employee class objects.

package com.w3codebox;
import org.springframework.orm.hibernate3.HibernateTemplate;
import java.util.*;
public class EmployeeDao {
HibernateTemplate template;
public void setTemplate(HibernateTemplate template) {
  this.template = template;
}
//method to save employee
public void saveEmployee(Employee e) {
  template.save(e);
}
//method to update employee
public void updateEmployee(Employee e) {
  template.update(e);
}
//method to delete employee
public void deleteEmployee(Employee e) {
  template.delete(e);
}
//method returns an employee with the given id
public Employee getById(int id) {
  Employee e = (Employee)template.get(Employee.class, id);
  return e;
}
//method to return all employees
public List<Employee> getEmployees() {
  List<Employee> list = new ArrayList<Employee>();
  list = template.loadAll(Employee.class);
  return list;
}
}

5،applicationContext.xml

في هذا الملف، نحن في BasicDataSource يقدم جميع معلومات قاعدة البيانات في الكائن. يتم استخدام الكائن LocalSessionFactoryBean كائن الفئة الذي يحتوي على بعض المعلومات الأخرى، مثل mappingResources وhibernateProperties. LocalSessionFactoryBean استخدام كائنات الفئة LocalSessionFactoryBean في فئة HibernateTemplate. دعونا نرى كود ملف applicationContext.xml.

ملف: applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"  value="oracle.jdbc.driver.OracleDriver"></property>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
    <property name="username" value="system"></property>
    <property name="password" value="oracle"></property>
  </bean>
  
  <bean id="mysessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    
    <property name="mappingResources">
    <list>
    <value>employee.hbm.xml</value>
    </list>
    </property>
    
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.show_sql">true</prop>
        
      </props>
    </property>
  </bean>
  
  <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="mysessionFactory"></property>
  </bean>
  
  <bean id="d" class="com.w3codebox.EmployeeDao">
  <property name="template" ref="template"></property>
  </bean>
  
  
  </beans>

6،InsertTest.java

هذا الكائن يستخدم كائن EmployeeDao ويتحول من خلال إرسال كائن Employee لاستدعاء دالة saveEmployee.

package com.w3codebox;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class InsertTest {
public static void main(String[] args) {
  
  Resource r = new ClassPathResource("applicationContext.xml");
  BeanFactory factory = new XmlBeanFactory(r);
  
  EmployeeDao dao = (EmployeeDao)factory.getBean("d");
  
  Employee e = new Employee();
  e.setId(114);
  e.setName("varun");
  e.setSalary(50000);
  
  dao.saveEmployee(e);
  
}
}

الآن، إذا رأيت الجدول في قاعدة بيانات oracle، فإن السجلات تم إدراجها بنجاح.

تمكين إنشاء الجداول تلقائيًا، عرض استعلامات SQL وما إلى ذلك.

يمكنك تمكين خصائص hibernate في ملف applicationContext.xml، مثل إنشاء الجداول تلقائيًا باستخدام hbm2ddl.auto وما إلى ذلك. دعنا نرى الكود:

<property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.show_sql">true</prop>
        
      </props>

إذا كتبت هذا الكود، لا تحتاج إلى إنشاء جدول لأن سيتم إنشاؤه تلقائيًا.