个性化阅读
专注于IT技术分析

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类的常用方法列表。

没有。 方法 描述
1) void persist(Object entity) 保留给定的对象。
2) Serializable save(Object entity) 保留给定的对象并返回ID。
3) void saveOrUpdate(Object entity) 保留或更新给定的对象。如果找到id, 它将更新记录, 否则保存记录。
4) void update(Object entity) 更新给定的对象。
5) void delete(Object entity) 根据ID删除给定的对象。
6) Object get(Class entityClass, Serializable id) 根据给定的id返回持久对象。
7) Object load(Class entityClass, Serializable id) 根据给定的id返回持久对象。
8) List loadAll(Class entityClass) 返回所有持久对象。

脚步

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

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

Hibernate和Spring集成的示例

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

具有目录结构的Spring Hibernate示例

1)在数据库中创建表

在此示例中, 我们使用Oracle作为数据库, 但是你可以使用任何数据库。让我们在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

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

package com.srcmini;

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

//getters and setters

}

3)employee.hbm.xml

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

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

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

package com.srcmini;
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<Employee> getEmployees(){
	List<Employee> list=new ArrayList<Employee>();
	list=template.loadAll(Employee.class);
	return list;
}
}

5)applicationContext.xml

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

Hibernate模板

文件: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.Oracle9Dialect</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.srcmini.EmployeeDao">
	<property name="template" ref="template"></property>
	</bean>
	
	
	</beans>

6) InsertTest.java

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

package com.srcmini;

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等自动创建表。让我们看一下代码:

<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.show_sql">true</prop>
				
			</props>

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

赞(0)
未经允许不得转载:srcmini » Hibernate和Spring集成

评论 抢沙发

评论前必须登录!