English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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框架提供了 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类的常用方法列表。
方法 | 说明 |
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. |
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.
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.
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.