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

Фреймворк Spring предоставляет HibernateTemplate Класс, поэтому вам не нужно выполнять太多 шагов, например, создавать Configuration, BuildSessionFactory, Session, начинать и завершать транзакцию и т.д.

Следовательно Это экономит много кода.

Понимание проблемы без использования spring:

Ниже приведен код сна, чтобы понять его:

    //Создание конфигурации
    Configuration cfg=new Configuration();  
    cfg.configure("hibernate.cfg.xml");  
      
    // Создание объекта session factory
    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, вам нужно следовать многим шагам.

Решение с помощью класса HibernateTemplate из Spring Framework:

Теперь вам не нужно выполнять много шагов. Вы можете просто написать так:

    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)Вернуть все постоянные объекты.

Шаги

Давайте посмотрим, какие это простые шаги интеграции спящего режима и пружинного набора:

Создание таблицы в базе данныхЭто опционально. Создайте файл applicationContext.xml. В котором содержится информация о DataSource, SessionFactory и т.д. Создайте файл Employee.java. Это класс persistence Создайте файл employee.hbm.xml. Это файл маппинга. Создайте файл EmployeeDao.java. Это класс DAO, использующий HibernateTemplate. Создайте файл InsertTest.java. Он вызовет метод класса EmployeeDao.

Пример интеграции Hibernate и Spring

В этом примере мы интегрируем приложение Hibernate с Spring. Давайте посмотрим на пример интеграции Hibernate и Spring Структура каталога.


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. Здесь он используется в качестве持久ного класса Hibernate.

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'?>
<!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 Java-класс для методов классов persistence сохранения объектов Employee.

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);
  return e;
}
//метод для возвращения всех сотрудников
public List<Employee> getEmployees() {
  List<Employee> list = new ArrayList<Employee>();
  list = template.loadAll(Employee.class);
  return list;
}
}

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.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.w3codebox.EmployeeDao">
  <property name="template" ref="template"></property>
  </bean>
  
  
  </beans>

6. InsertTest.java

Этот класс использует объект класса EmployeeDao и вызывает метод saveEmployee, передавая объект класса Employee.

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.

Вы можете включить свойства hibernate в файл 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>

Если вы пишете этот код, вам не нужно создавать таблицы, так как они будут автоматически созданы.