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

Integración de Spring con Hibernate

Podemos integrar simplemente la aplicación hibernate con la aplicación spring.

En el marco hibernate, proporcionamos toda la información de la base de datos funcional en el archivo hibernate.cfg.xml.

Pero, si queremos integrar una aplicación hibernate con spring, no es necesario crear el archivo hibernate.cfg.xml. Podemos proporcionar toda la información en el archivo applicationContext.xml.

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)Actualiza el objeto dado.
void delete(Object entity)Elimina el objeto dado según el id.
Object get(Class entityClass, Serializable id)Devuelve el objeto persistente según el id dado.
Object load(Class entityClass, Serializable id)Devuelve el objeto persistente según el id dado.
List loadAll(Class entityClass)Devuelve todos los objetos persistentes.

Pasos

Vamos a ver qué son los pasos simples para la integración de Hibernate y Spring:

Crear tabla en la base de datos。 Esto es opcional. Crear el archivo applicationContext.xml。 Contiene información de DataSource, SessionFactory, etc. Crear el archivo Employee.java。 Esta es la clase persistente Crear el archivo employee.hbm.xml。 Es el archivo de mapeo. Crear el archivo EmployeeDao.java。 Es una clase DAO que utiliza HibernateTemplate. Crear el archivo InsertTest.java。 Esto llamará a los métodos de la clase EmployeeDao.

Ejemplo de integración de Hibernate y Spring

En este ejemplo, integraremos la aplicación Hibernate con Spring. Vamos a ver el ejemplo de integración de Hibernate y Spring Estructura de directorio


1Crear tabla en la base de datos

En este ejemplo, utilizamos Oracle como base de datos, pero puede usar cualquier base de datos. Vamos a crear una tabla en la base de datos Oracle

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

2employee.java

Esta es una clase POJO simple. Aquí, se utiliza como clase persistente de Hibernate.

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

3employee.hbm.xml

Este archivo de mapeo contiene toda la información de las clases persistentes.

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

Esto es una utilización de HibernateTemplate Clase Java que utiliza métodos para persistir objetos de la clase Employee.

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;
}
//Método para guardar empleado
public void saveEmployee(Employee e) {
  template.save(e);
}
//Método para actualizar empleado
public void updateEmployee(Employee e) {
  template.update(e);
}
//Método para eliminar empleado
public void deleteEmployee(Employee e) {
  template.delete(e);
}
//El método devuelve un empleado con el id dado
public Employee getById(int id) {
  Empleado e = (Empleado)template.get(Employee.class, id);
  return e;
}
//método para retornar todos los empleados
public List<Employee> getEmployees(){
  List<Employee> list=new ArrayList<Employee>();
  list=template.loadAll(Employee.class);
  return list;
}
}

5applicationContext.xml

En este archivo, estamos en BasicDataSource proporciona toda la información de la base de datos. Este objeto se utiliza LocalSessionFactoryBean objeto de clase que contiene algunas otras informaciónes, como mappingResources y hibernateProperties. LocalSessionFactoryBean Los objetos de la clase se utilizan en la clase HibernateTemplate. Vamos a ver el código del archivo applicationContext.xml.

archivo: 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

Esta clase utiliza el objeto de clase EmployeeDao y llama al método saveEmployee pasando el objeto de clase Employee.

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);
  
}
}

Ahora, si ve la tabla en la base de datos Oracle, se ha insertado correctamente el registro.

Activar la creación automática de tablas, mostrar consultas sql, etc.

Puede activar las propiedades de hibernate en el archivo applicationContext.xml, por ejemplo, a través de hbm2ddl.auto para la creación automática de tablas. Vamos a ver el código:

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

Si escribe este código, no es necesario crear la tabla, ya que se creará automáticamente.