Spring 集成Hibernate

我們可以簡單地將hibernate應(yīng)用程序與spring應(yīng)用程序集成。

在hibernate框架中,我們提供了所有功能數(shù)據(jù)庫信息hibernate.cfg.xml文件。

但是,如果我們要將hibernate應(yīng)用程序與spring集成在一起,則無需創(chuàng)建hibernate.cfg.xml文件。我們可以在applicationContext.xml文件中提供所有信息。

Spring框架具有休眠功能的優(yōu)勢

Spring框架提供了 HibernateTemplate 類,因此您無需執(zhí)行太多步驟,例如創(chuàng)建Configuration,BuildSessionFactory,Session,開始和提交事務(wù)等。

因此 它節(jié)省了大量代碼。

不使用spring的理解問題:

下面的休眠代碼讓我們理解它:

    //創(chuàng)建配置
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //創(chuàng)建seession factory對象
    SessionFactory factory=cfg.buildSessionFactory();  
      
    //創(chuàng)建 session object  
    Session session=factory.openSession();  
      
    //創(chuàng)建 transaction object  
    Transaction t=session.beginTransaction();  
          
    Employee e1=new Employee(111,"arun",40000);  
    session.persist(e1);//persisting the object  
      
    t.commit();//事務(wù)提交
    session.close();

正如您在唯一的hibernate代碼中所看到的,您必須遵循許多步驟。

使用Spring Framework的HibernateTemplate類的解決方案:

現(xiàn)在,您無需執(zhí)行太多步驟。您可以簡單地這樣寫:

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

HibernateTemplate類的方法

我們來看看HibernateTemplate類的常用方法列表。

方法說明
void persist(Object entity)堅(jiān)持給定的對象。
Serializable save(Object entity)保留給定對象并返回ID。
void saveOrUpdate(Object entity)持久或更新給定的對象。如果找到id,它將更新記錄,否則保存記錄。
void update(Object entity)更新給定的對象。
void delete(Object entity)根據(jù)id刪除給定的對象。
Object get(Class entityClass, Serializable id)根據(jù)給定的id返回持久對象。
Object load(Class entityClass, Serializable id)根據(jù)給定的id返回持久對象。
List loadAll(Class entityClass)返回所有持久對象。

步驟

讓我們看看休眠和彈簧集成的簡單步驟是什么:

在數(shù)據(jù)庫中創(chuàng)建表。這是可選的。 創(chuàng)建applicationContext.xml文件。其中包含DataSource,SessionFactory等的信息。 創(chuàng)建Employee.java文件。這是持久性類 創(chuàng)建employee.hbm.xml文件。它是映射文件。 創(chuàng)建EmployeeDao.java文件。它是使用HibernateTemplate的dao類。 創(chuàng)建InsertTest.java文件。它將調(diào)用EmployeeDao類的方法。

Hibernate和spring集成的示例

在此示例中,我們將把hibernate應(yīng)用程序與spring集成。讓我們看看spring和hibernate示例的 目錄結(jié)構(gòu)。

帶有目錄結(jié)構(gòu)的spring休眠示例


1、在數(shù)據(jù)庫中創(chuàng)建表

在此示例中,我們使用Oracle作為數(shù)據(jù)庫,但是您可以使用任何數(shù)據(jù)庫。讓我們在oracle數(shù)據(jù)庫中創(chuàng)建表

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

2、Employee.java

這是一個(gè)簡單的POJO類。在這里,它用作休眠的持久類。

package com.nhooo;
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.nhooo.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

這是一個(gè)使用 HibernateTemplate 類方法來持久保存Employee類對象的Java類。

package com.nhooo;
import org.springframework.orm.hibernate3.HibernateTemplate;
import java.util.*;
public class EmployeeDao {
HibernateTemplate template;
public void setTemplate(HibernateTemplate template) {
  this.template = template;
}
//保存職員的方法
public void saveEmployee(Employee e){
  template.save(e);
}
//更新員工的方法
public void updateEmployee(Employee e){
  template.update(e);
}
//刪除職員的方法
public void deleteEmployee(Employee e){
  template.delete(e);
}
//方法返回一個(gè)具有給定 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 對象中提供數(shù)據(jù)庫的所有信息。該對象用于 LocalSessionFactoryBean 類對象,其中包含一些其他信息,例如mappingResources和hibernateProperties。 LocalSessionFactoryBean 類的對象在HibernateTemplate類中使用。讓我們看一下applicationContext.xml文件的代碼。

休眠模板

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

6、InsertTest.java

此類使用EmployeeDao類對象,并通過傳遞Employee類的對象來調(diào)用其saveEmployee方法。

package com.nhooo;
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);
  
}
}

現(xiàn)在,如果您在oracle數(shù)據(jù)庫中看到該表,則記錄已成功插入。

啟用自動(dòng)表創(chuàng)建,顯示sql查詢等。

您可以在applicationContext.xml文件中啟用hibernate屬性,例如通過hbm2ddl.auto等進(jìn)行自動(dòng)表創(chuàng)建。讓我們看一下代碼:

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

如果編寫此代碼,則無需創(chuàng)建表,因?yàn)閷⒆詣?dòng)創(chuàng)建表。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清