English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
hibernateアプリケーションをspringアプリケーションと簡単に統合できます。
hibernateフレームワークでは、すべての機能データベース情報をhibernate.cfg.xmlファイルで提供しています。
hibernateアプリケーションをspringと統合する場合、hibernate.cfg.xmlファイルを作成する必要はありません。applicationContext.xmlファイルですべての情報を提供できます。
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クラスの常用メソッドリストを見てみましょう。
メソッド | 説明 |
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と統合します。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データベースでそのテーブルが見える場合、レコードが成功して挿入されました。
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>
このコードを書くと、テーブルを作成する必要はなく、自動的にテーブルが作成されます。