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"); // Создание объекта 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.
Метод | Объяснение |
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 Структура каталога.
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, то запись успешно добавлена.
Вы можете включить свойства 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>
Если вы пишете этот код, вам не нужно создавать таблицы, так как они будут автоматически созданы.