English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring 集成Hibernate

hibernateアプリケーションをspringアプリケーションと簡単に統合できます。

hibernateフレームワークでは、すべての機能データベース情報をhibernate.cfg.xmlファイルで提供しています。

hibernateアプリケーションをspringと統合する場合、hibernate.cfg.xmlファイルを作成する必要はありません。applicationContext.xmlファイルですべての情報を提供できます。

SpringフレームワークはHibernate機能の利点を持ちます。

Springフレームワークは提供しています HibernateTemplate クラスが存在するため、Configuration、BuildSessionFactory、Session、トランザクションの開始およびコミットなど、多くの手順を実行する必要はありません。

したがって 多くのコードを節約しました。

Springを使用しない場合の理解問題:

以下の休眠コードで理解してみましょう:

    //設定の作成
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    //セッションファクトリーオブジェクトの作成
    SessionFactory factory=cfg.buildSessionFactory();  
      
    //セッションオブジェクトの作成  
    Session session=factory.openSession();  
      
    //トランザクションオブジェクトの作成  
    Transaction t=session.beginTransaction();  
          
    Employee e1=new Employee(111,"arun",40000);  
    session.persist(e1);//オブジェクトの永続化  
      
    t.commit();//トランザクションコミット
    session.close();

ユニークなhibernateコードで見たように、多くの手順に従う必要があります。

Spring FrameworkのHibernateTemplateクラスの解決策:

今では、多くの手順を踏む必要はありません。単純に以下のように書くことができます:

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

HibernateTemplateクラスのメソッド

HibernateTemplateクラスの常用メソッドリストを見てみましょう。

メソッド説明
void persist(Object entity)指定のオブジェクトを永続化します。
Serializable save(Object entity)指定のオブジェクトを保持し、IDを返します。
void saveOrUpdate(Object entity)指定のオブジェクトを永続化または更新します。IDが見つかった場合、レコードを更新し、そうでない場合、レコードを保存します。
void update(Object entity)指定されたオブジェクトを更新します。
void delete(Object entity)IDに基づいて指定されたオブジェクトを削除します。
Object get(Class entityClass, Serializable id)指定されたIDに基づいて持久オブジェクトを返します。
Object load(Class entityClass, Serializable id)指定されたIDに基づいて持久オブジェクトを返します。
List loadAll(Class entityClass)すべての持久オブジェクトを返します。

ステップ

休眠とspringの統合の簡単な手順を見てみましょう:

データベースにテーブルを作成。これはオプションです。 applicationContext.xmlファイルを作成します。DataSource、SessionFactoryなどの情報が含まれています。 Employee.javaファイルを作成します。これは持久性クラスです。 employee.hbm.xmlファイルを作成します。それはマッピングファイルです。 EmployeeDao.javaファイルを作成します。それはHibernateTemplateを使用したDAOクラスです。 InsertTest.javaファイルを作成します。それはEmployeeDaoクラスのメソッドを呼び出します。

Hibernateとspringの統合の例

この例では、hibernateアプリケーションをspringと統合します。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.w3codebox;
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'-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.w3codebox.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

这是一个使用 HibernateTemplate 用于持久保存Employee类对象的Java类的类方法。

package com.w3codebox;
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);
}
//该方法返回具有给定id的雇员
public Employee getById(int id) {
  Employee e = (Employee)template.get(Employee.class, id);
  eを返します;
}
//メソッドを返します;
public List<Employee> getEmployees(){
  List<Employee> list=new ArrayList<Employee>();
  list=template.loadAll(Employee.class);
  リストを返します;
}
}

5、applicationContext.xml

このファイルで、私たちは BasicDataSource オブジェクトがデータベースのすべての情報を提供します。このオブジェクトは、 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.Oracle<9Dialect</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.w3codebox.EmployeeDao">
  <property name="template" ref="template"></property>
  </bean>
  
  
  </beans>

6、InsertTest.java

このクラスはEmployeeDaoクラスのオブジェクトを使用し、Employeeクラスのオブジェクトを渡してsaveEmployeeメソッドを呼び出します。

package com.w3codebox;
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ファイルでhibernate属性を有効にすることができます。例えば、hbm2ddl.autoなどの自動テーブル作成を行います。以下のコードを見てみましょう:

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

このコードを書くと、テーブルを作成する必要はなく、自動的にテーブルが作成されます。