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

Spring Integration mit Hibernate

Wir können Hibernate-Anwendungen einfach mit Spring-Anwendungen integrieren.

Im Hibernate-Framework bieten wir alle Funktionalitäten der Datenbankinformationen in der Datei hibernate.cfg.xml an.

Aber wenn wir Hibernate-Anwendungen mit Spring integrieren möchten, müssen wir keine Datei hibernate.cfg.xml erstellen. Wir können alle Informationen in der Datei applicationContext.xml bereitstellen.

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

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

因此 它节省了大量代码

不使用spring的理解问题:

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

    //创建配置
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //创建seession factory对象
    SessionFactory factory=cfg.buildSessionFactory();  
      
    //创建 session object  
    Session session=factory.openSession();  
      
    //创建 transaction object  
    Transaction t=session.beginTransaction();  
          
    Employee e1=new Employee(111,"arun",40000);  
    session.persist(e1);//persisting the object  
      
    t.commit();//事务提交
    session.close();

正如您在唯一的hibernate代码中所看到的,您必须遵循许多步骤。

使用Spring Framework的HibernateTemplate类的解决方案:

现在,您无需执行太多步骤。您可以简单地这样写:

    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)Aktualisiert das angegebene Objekt.
void delete(Object entity)Gibt das angegebene Objekt mit der id zurück.
Object get(Class entityClass, Serializable id)Gibt das Persistenzobjekt zurück, das dem gegebenen id entspricht.
Object load(Class entityClass, Serializable id)Gibt das Persistenzobjekt zurück, das dem gegebenen id entspricht.
List loadAll(Class entityClass)Ruft alle Persistenzobjekte zurück.

Schritte

Lassen Sie uns die einfachen Schritte der Integration von Hibernate und Spring betrachten:

Tisch in der Datenbank erstellen。 Dies ist optional. Erstellen Sie die Datei applicationContext.xml。 Es enthält Informationen wie DataSource, SessionFactory usw. Erstellen Sie die Datei Employee.java。 Dies ist die Persistenzklasse Erstellen Sie die Datei employee.hbm.xml。 Es ist die Mapping-Datei. Erstellen Sie die Datei EmployeeDao.java。 Es ist eine DAO-Klasse, die HibernateTemplate verwendet. Erstellen Sie die Datei InsertTest.java。 Es wird die Methode der EmployeeDao-Klasse aufrufen.

Beispiel für die Integration von Hibernate und Spring

In diesem Beispiel werden wir die Hibernate-Anwendung mit Spring integrieren. Lassen Sie uns die Beispiele für die Integration von Spring und Hibernate betrachten. Verzeichnisstruktur


1、Tisch in der Datenbank erstellen

In diesem Beispiel verwenden wir Oracle als Datenbank, aber Sie können jede Datenbank verwenden. Lassen Sie uns in der Oracle-Datenbank einen Tisch erstellen

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

2、Employee.java

Dies ist eine einfache POJO-Klasse. Hier wird sie als Hibernate-Persistenzklasse verwendet.

package com.w;3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//Getter und Setter
}

3、employee.hbm.xml

Diese Mapping-Datei enthält alle Informationen der Persistenzklasse.

<?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

Dies ist eine Verwendung HibernateTemplate Java-Klasse zum Persistieren von Objekten der Klasse Employee.

package com.w;3codebox;
import org.springframework.orm.hibernate3.HibernateTemplate;
import java.util.*;
public class EmployeeDao {
HibernateTemplate template;
public void setTemplate(HibernateTemplate template) {
  this.template = template;
}
//Methode zum Speichern des Mitarbeiters
public void saveEmployee(Employee e) {
  template.save(e);
}
//Methode zum Aktualisieren des Mitarbeiters
public void updateEmployee(Employee e) {
  template.update(e);
}
//Methode zum Löschen des Mitarbeiters
public void deleteEmployee(Employee e) {
  template.delete(e);
}
//Die Methode gibt einen Mitarbeiter mit der gegebenen id zurück
public Employee getById(int id) {
  Employee e = (Employee)template.get(Employee.class, id);
  return e;
}
//Methode zum Zurückgeben aller Mitarbeiter
public List<Employee> getEmployees()
  List<Employee> list = new ArrayList<Employee>();
  list = template.loadAll(Employee.class);
  return list;
}
}

5, applicationContext.xml

In dieser Datei BasicDataSource Objekt alle Informationen der Datenbank bereitstellt. Dieses Objekt wird verwendet LocalSessionFactoryBean Klasse, die einige andere Informationen enthält, wie z.B. mappingResources und hibernateProperties. LocalSessionFactoryBean Objekte der Klasse HibernateTemplate werden verwendet. Lassen Sie uns den Code der Datei applicationContext.xml betrachten.

Datei: 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.Oracle<9Dialect</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

Diese Klasse verwendet das Objekt der Klasse EmployeeDao und ruft die Methode saveEmployee auf, indem ein Objekt der Klasse Employee übergeben wird.

package com.w;3codebox;
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);
  
}
}

Wenn Sie in der Oracle-Datenbank diese Tabelle sehen, wurde der Eintrag erfolgreich eingefügt.

Automatische Tabellenerstellung, Anzeige von SQL-Abfragen usw. aktivieren.

Sie können Hibernate-Attribute im applicationContext.xml-Datei aktivieren, z.B. durch hbm2ddl.auto und andere für die automatische Tabellenerstellung. Lassen Sie uns den Code betrachten:

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

Wenn Sie diesen Code schreiben, müssen Sie keine Tabelle erstellen, da sie automatisch erstellt wird.