亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Spring 集成Hibernate

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

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

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

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

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

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

不使用spring的理解問(wèn)題:

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

    //創(chuàng)建配置
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //創(chuàng)建seession factory對(duì)象
    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)在,您無(wú)需執(zhí)行太多步驟。您可以簡(jiǎn)單地這樣寫:

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

HibernateTemplate類的方法

我們來(lái)看看HibernateTemplate類的常用方法列表。

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

步驟

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

在數(shù)據(jù)庫(kù)中創(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ù)庫(kù)中創(chuàng)建表

在此示例中,我們使用Oracle作為數(shù)據(jù)庫(kù),但是您可以使用任何數(shù)據(jù)庫(kù)。讓我們?cè)趏racle數(shù)據(jù)庫(kù)中創(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è)簡(jiǎn)單的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 類方法來(lái)持久保存Employee類對(duì)象的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

在此文件中,我們?cè)? BasicDataSource 對(duì)象中提供數(shù)據(jù)庫(kù)的所有信息。該對(duì)象用于 LocalSessionFactoryBean 類對(duì)象,其中包含一些其他信息,例如mappingResources和hibernateProperties。 LocalSessionFactoryBean 類的對(duì)象在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類對(duì)象,并通過(guò)傳遞Employee類的對(duì)象來(lái)調(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ù)庫(kù)中看到該表,則記錄已成功插入。

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

您可以在applicationContext.xml文件中啟用hibernate屬性,例如通過(guò)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>

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