📅  最后修改于: 2021-01-02 15:56:26             🧑  作者: Mango
我们可以简单地将休眠应用程序与spring应用程序集成在一起。
在hibernate框架中,我们提供了所有数据库信息hibernate.cfg.xml文件。
但是,如果要将hibernate应用程序与spring集成在一起,则无需创建hibernate.cfg.xml文件。我们可以在applicationContext.xml文件中提供所有信息。
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类的常用方法列表。
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. |
让我们看看休眠和弹簧集成的简单步骤是什么:
在此示例中,我们将把休眠应用程序与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数据库中看到该表,则记录已成功插入。
您可以在applicationContext.xml文件中启用许多休眠属性,例如通过hbm2ddl.auto等自动创建表。让我们看一下代码:
org.hibernate.dialect.Oracle9Dialect
update
true
如果编写此代码,则无需创建表,因为表将自动创建。