English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Podemos integrar simplesmente o aplicativo Hibernate com o aplicativo Spring.
No framework Hibernate, fornecemos todas as informações de banco de dados no arquivo hibernate.cfg.xml.
Mas, se quisermos integrar o aplicativo Hibernate com o Spring, não é necessário criar o arquivo hibernate.cfg.xml. Podemos fornecer todas as informações no arquivo 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) | Atualiza o objeto fornecido. |
void delete(Object entity) | Exclui o objeto fornecido com base no id. |
Object get(Class entityClass, Serializable id) | Retorna o objeto persistente com base no id fornecido. |
Object load(Class entityClass, Serializable id) | Retorna o objeto persistente com base no id fornecido. |
List loadAll(Class entityClass) | Retorna todos os objetos persistentes. |
Vamos ver os passos simples para integrar Hibernate e Spring:
Criar a tabela no banco de dados。 Isso é opcional. Criar o arquivo applicationContext.xml。 Ele contém informações como DataSource, SessionFactory etc. Criar o arquivo Employee.java。 É a classe persistente. Criar o arquivo employee.hbm.xml。 É o arquivo de mapeamento. Criar o arquivo EmployeeDao.java。 É uma classe DAO (Data Access Object) que usa HibernateTemplate. Criar o arquivo InsertTest.java。 Ele chamará os métodos da classe EmployeeDao.
Neste exemplo, integraremos o aplicativo Hibernate com o Spring. Vamos ver os exemplos de integração entre Spring e Hibernate. Estrutura de diretório。
1、criar a tabela no banco de dados
Neste exemplo, usamos Oracle como banco de dados, mas você pode usar qualquer banco de dados. Vamos criar a tabela no banco de dados 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
Este é um simples POJO (Plain Old Java Object). Aqui, ele é usado como classe persistente do Hibernate.
package com.w;3codebox; public class Employee { private int id; private String name; private float salary; //getters e setters }
3、employee.hbm.xml
Este arquivo de mapeamento contém todas as informações das classes 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
Esta é uma classe que utiliza HibernateTemplate Classe Java para métodos de persistência de objetos da classe 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; } //Método para salvar funcionário public void saveEmployee(Employee e) { template.save(e); } //Método para atualizar funcionário public void updateEmployee(Employee e) { template.update(e); } //Método para deletar funcionário public void deleteEmployee(Employee e) { template.delete(e); } //O método retorna um funcionário com o id fornecido public Employee getById(int id) { Employee e = (Employee)template.get(Employee.class, id); return e; } //método para retornar todos os funcionários public List<Employee> getEmployees(){ List<Employee> list=new ArrayList<Employee>(); list=template.loadAll(Employee.class); return list; } }
5e applicationContext.xml
neste arquivo, estamos BasicDataSource fornece todas as informações do banco de dados. Este objeto é usado LocalSessionFactoryBean objeto da classe, que contém algumas outras informações, como mappingResources e hibernateProperties. LocalSessionFactoryBean o objeto da classe em HibernateTemplate é usado. Vamos olhar para o código do arquivo applicationContext.xml.
arquivo: 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
Este classe utiliza o objeto EmployeeDao e chama o método saveEmployee passando o objeto da classe Employee.
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); } }
Agora, se você ver a tabela no banco de dados Oracle, o registro foi inserido com sucesso.
Você pode ativar as propriedades hibernate no arquivo applicationContext.xml, por exemplo, através de hbm2ddl.auto para criar automaticamente a tabela. Vamos ver o 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>
Se você escrever este código, não é necessário criar a tabela, pois será criada automaticamente.