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

Intégration Spring avec Hibernate

Nous pouvons simplement intégrer une application Hibernate avec une application Spring.

Dans le cadre du cadre Hibernate, nous fournissons toutes les informations de base de données nécessaires dans le fichier hibernate.cfg.xml.

Mais, si nous devons intégrer une application Hibernate avec Spring, il n'est pas nécessaire de créer un fichier hibernate.cfg.xml. Nous pouvons fournir toutes les informations dans le fichier applicationContext.xml.

Le framework Spring a l'avantage de la fonction Hibernate

Le framework Spring fournit HibernateTemplate Classe, donc vous n'avez pas besoin de suivre de nombreux étapes, par exemple créer Configuration, BuildSessionFactory, Session, commencer et soumettre la transaction, etc.

Par conséquent Il économise beaucoup de code

Problème de compréhension sans Spring:

Le code de pause suivant nous permet de comprendre:

    //Création de la configuration
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //Création de l'objet seession factory
    SessionFactory factory=cfg.buildSessionFactory();  
      
    //Création de l'objet session  
    Session session=factory.openSession();  
      
    //Création de l'objet transaction  
    Transaction t=session.beginTransaction();  
          
    Employee e1=new Employee(111,"arun",40000);  
    session.persist(e1);//persister l'objet  
      
    t.commit();//Soumission de la transaction
    session.close();

Comme vous pouvez le voir dans le code hibernate unique, vous devez suivre de nombreux étapes.

Solution avec la classe HibernateTemplate du framework Spring:

Maintenant, vous n'avez pas besoin de suivre de nombreux étapes. Vous pouvez simplement écrire ainsi:

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

Méthodes de la classe HibernateTemplate

Voyons la liste des méthodes courantes de la classe HibernateTemplate.

MéthodeDescription
void persist(Object entity)Persevére l'objet donné.
Serializable save(Object entity)Conserve l'objet donné et retourne l'ID.
void saveOrUpdate(Object entity)Permet de persister ou de mettre à jour l'objet donné. Si l'id est trouvé, il met à jour l'enregistrement, sinon sauvegarde l'enregistrement.
void update(Object entity)Mettre à jour l'objet donné.
void delete(Object entity)Supprimer l'objet donné en fonction de l'id.
Object get(Class entityClass, Serializable id)Retourner l'objet persistant en fonction de l'id donné.
Object load(Class entityClass, Serializable id)Retourner l'objet persistant en fonction de l'id donné.
List loadAll(Class entityClass)Retourner tous les objets persistants.

Étapes

Voyons les étapes simples d'intégration de Hibernate et Spring:

Créer une table dans la base de données。C'est optionnel. Créer un fichier applicationContext.xml。Il contient des informations telles que DataSource, SessionFactory, etc. Créer un fichier Employee.java。C'est une classe persistante Créer un fichier employee.hbm.xml。C'est un fichier de mappage. Créer un fichier EmployeeDao.java。C'est une classe DAO utilisant HibernateTemplate. Créer un fichier InsertTest.java。Il appelle la méthode de la classe EmployeeDao.

Exemple d'intégration de Hibernate et Spring

Dans cet exemple, nous allons intégrer l'application Hibernate avec Spring. regardons les exemples d'intégration de Spring et Hibernate Structure du répertoire


1、créons une table dans la base de données

Dans cet exemple, nous utilisons Oracle comme base de données, mais vous pouvez utiliser n'importe quelle base de données. Créons une table dans la base de données 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

C'est une classe POJO simple. Ici, elle est utilisée comme classe persistante de Hibernate.

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

3、employee.hbm.xml

Ce fichier de mappage contient toutes les informations des classes persistantes.

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

C'est un utilisation HibernateTemplate Java class pour la persistance des objets de la 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éthode de sauvegarde de l'employé
public void saveEmployee(Employee e) {
  template.save(e);
}
//Méthode de mise à jour de l'employé
public void updateEmployee(Employee e) {
  template.update(e);
}
//Méthode de suppression d'employé
public void deleteEmployee(Employee e) {
  template.delete(e);
}
//La méthode retourne un employé avec l'ID donné
public Employee getById(int id) {
  Employee e = (Employee)template.get(Employee.class, id);
  retourner e;
}
//méthode pour retourner tous les employés
public List<Employee> getEmployees(){
  List<Employee> list=new ArrayList<Employee>();
  list=template.loadAll(Employee.class);
  retourner la liste;
}
}

5et applicationContext.xml

Dans ce fichier, nous avons BasicDataSource L'objet fournit toutes les informations de la base de données. Cet objet est utilisé LocalSessionFactoryBean L'objet de la classe, qui contient d'autres informations, telles que mappingResources et hibernateProperties. LocalSessionFactoryBean L'objet de la classe dans HibernateTemplate est utilisé. Voyons le code du fichier applicationContext.xml.

Fichier: 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">mise à jour</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

Cette classe utilise l'objet de la classe EmployeeDao et appelle la méthode saveEmployee en passant l'objet de la 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);
  
}
}

Maintenant, si vous voyez cette table dans la base de données oracle, l'enregistrement a été inséré avec succès.

Activer la création automatique de la table, afficher les requêtes SQL, etc.

Vous pouvez activer les propriétés hibernate dans le fichier applicationContext.xml, par exemple via hbm2Pour la création automatique de la table, regardez le code suivant:

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

Si vous écrivez ce code, vous n'avez pas besoin de créer de table, car elle sera créée automatiquement.