📜  Hibernate和Spring集成示例教程

📅  最后修改于: 2021-01-02 15:56:26             🧑  作者: Mango

Hibernate和Spring集成

我们可以简单地将休眠应用程序与spring应用程序集成在一起。

在hibernate框架中,我们提供了所有数据库信息hibernate.cfg.xml文件。

但是,如果要将hibernate应用程序与spring集成在一起,则无需创建hibernate.cfg.xml文件。我们可以在applicationContext.xml文件中提供所有信息。

Spring框架与Hibernate的优势

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

这样可以节省很多代码

在不使用spring的情况下理解问题:

让我们通过下面给出的休眠代码了解它:

    //creating configuration
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //creating seession factory object  
    SessionFactory factory=cfg.buildSessionFactory();  
      
    //creating session object  
    Session session=factory.openSession();  
      
    //creating transaction object  
    Transaction t=session.beginTransaction();  
          
    Employee e1=new Employee(111,"arun",40000);  
    session.persist(e1);//persisting the object  
      
    t.commit();//transaction is commited  
    session.close();  

正如您在唯一的休眠代码中看到的那样,您必须执行许多步骤。

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

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

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

HibernateTemplate类的方法

让我们看一下HibernateTemplate类的常用方法列表。

No. Method Description
1) void persist(Object entity) persists the given object.
2) Serializable save(Object entity) persists the given object and returns id.
3) void saveOrUpdate(Object entity) persists or updates the given object. If id is found, it updates the record otherwise saves the record.
4) void update(Object entity) updates the given object.
5) void delete(Object entity) deletes the given object on the basis of id.
6) Object get(Class entityClass, Serializable id) returns the persistent object on the basis of given id.
7) Object load(Class entityClass, Serializable id) returns the persistent object on the basis of given id.
8) List loadAll(Class entityClass) returns the all the persistent objects.

脚步

让我们看看休眠和弹簧集成的简单步骤是什么:

  • 在数据库中创建表这是可选的。
  • 创建applicationContext.xml文件,其中包含数据源,SessionFactory等的信息。
  • 创建Employee.java文件这是持久类
  • 创建employee.hbm.xml文件这是映射文件。
  • 创建EmployeeDao.java文件这是使用HibernateTemplate的dao类。
  • 创建InsertTest.java文件调用EmployeeDao类的方法。

Hibernate和Spring集成的示例

在此示例中,我们将把休眠应用程序与spring集成在一起。让我们看一下spring和hibernate示例的目录结构。

在此示例中,我们使用Oracle作为数据库,但您可以使用任何数据库。让我们在oracle数据库中创建表

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

这是一个简单的POJO类。在这里,它用作休眠的持久类。


package com.javatpoint;

public class Employee {
private int id;
private String name;
private float salary;

//getters and setters

}

该映射文件包含持久类的所有信息。







          
          
          
          
          
          

          


这是一个Java类,使用HibernateTemplate类方法来保留Employee类的对象。

package com.javatpoint;
import org.springframework.orm.hibernate3.HibernateTemplate;
import java.util.*;
public class EmployeeDao {
HibernateTemplate template;
public void setTemplate(HibernateTemplate template) {
    this.template = template;
}
//method to save employee
public void saveEmployee(Employee e){
    template.save(e);
}
//method to update employee
public void updateEmployee(Employee e){
    template.update(e);
}
//method to delete employee
public void deleteEmployee(Employee e){
    template.delete(e);
}
//method to return one employee of given id
public Employee getById(int id){
    Employee e=(Employee)template.get(Employee.class,id);
    return e;
}
//method to return all employees
public List getEmployees(){
    List list=new ArrayList();
    list=template.loadAll(Employee.class);
    return list;
}
}

在此文件中,我们在BasicDataSource对象中提供数据库的所有信息。该对象在LocalSessionFactoryBean类对象中使用,包含一些其他信息,例如mappingResources和hibernateProperties。 HibernateTemplate类使用LocalSessionFactoryBean类的对象。让我们看一下applicationContext.xml文件的代码。

文件:applicationContext.xml





    
        
        
        
        
    
    
    
        
        
        
        
        employee.hbm.xml
        
        
        
        
            
                org.hibernate.dialect.Oracle9Dialect
                update
                true
                
            
        
    
    
    
    
    
    
    
    
    
    
    
    

此类使用EmployeeDao类对象,并通过传递Employee类的对象来调用其saveEmployee方法。


package com.javatpoint;

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

现在,如果您在oracle数据库中看到该表,则记录已成功插入。

启用自动表创建,显示sql查询等。

您可以在applicationContext.xml文件中启用许多休眠属性,例如通过hbm2ddl.auto等自动创建表。让我们看一下代码:


            
                org.hibernate.dialect.Oracle9Dialect
                update
                true
                
            

如果编写此代码,则无需创建表,因为表将自动创建。