Рубрики
Без рубрики

Спящий режим 3 с весной

Настройка Hibernate 3 с Spring – конфигурация Java и XML, интеграция с MySQL и рекомендации по использованию.

Автор оригинала: Eugen Paraschiv.

1. Обзор

Эта статья будет посвящена настройке Hibernate 3 с Spring – мы рассмотрим, как использовать конфигурацию XML и Java для настройки Spring с Hibernate 3 и MySQL.

Обновление: эта статья посвящена Hibernate 3. Если вы ищете текущую версию Hibernate – это статья, посвященная ей .

2. Конфигурация Java Spring для гибернации 3

Настройка Hibernate 3 с помощью Spring и Java config проста:

import java.util.Properties;
import javax.sql.DataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.orm.hibernate3.HibernateTransactionManager;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.google.common.base.Preconditions;

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "com.baeldung.spring.persistence" })
public class PersistenceConfig {

   @Autowired
   private Environment env;

   @Bean
   public AnnotationSessionFactoryBean sessionFactory() {
      AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "com.baeldung.spring.persistence.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
      HibernateTransactionManager txManager = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         {
            setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
         }
      };
   }
}

По сравнению с конфигурацией XML, описанной далее, существует небольшая разница в том, как один компонент в конфигурации обращается к другому. В XML нет никакой разницы между , указывающим на боб, или указывающим на фабрику бобов, способную создать этот боб . Поскольку конфигурация Java типобезопасна-указание непосредственно на фабрику бобов больше не является опцией – нам нужно вручную извлечь боб из фабрики бобов:

txManager.setSessionFactory(sessionFactory().getObject());

3. Конфигурация XML Spring для Hibernate 3

Аналогично, мы также можем настроить Hibernate 3 с помощью XML config :

Затем этот XML-файл загружается в контекст Spring с помощью класса @Configuration :

@Configuration
@EnableTransactionManagement
@ImportResource({ "classpath:persistenceConfig.xml" })
public class PersistenceXmlConfig {
   //
}

Для обоих типов конфигурации конкретные свойства JDBC и Hibernate хранятся в файле свойств:

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql
# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop

4. Spring, Hibernate и MySQL

В приведенном выше примере используется MySQL 5 в качестве базовой базы данных, настроенной с помощью Hibernate, однако Hibernate поддерживает несколько базовых баз данных SQL .

4.1. Водитель

Имя класса драйвера настраивается с помощью свойства jdbc.driverClassName , предоставленного источнику данных.

В приведенном выше примере он установлен в com.mysql.jdbc.Driver из зависимости mysql-connector-java , которую мы определили в pom в начале статьи.

4.2. Диалект

Диалект настраивается с помощью свойства hibernate.dialect , предоставленного Hibernate SessionFactory .

В приведенном выше примере это значение равно org.hibernate.dialect.MySQL5Dialect поскольку мы используем MySQL 5 в качестве базовой базы данных. Существует несколько других диалектов, поддерживающих MySQL :

  • орг.спящий режим.диалект.MySQL5InnoDBDialect – для MySQL 5.x с механизмом хранения InnoDB
  • орг.спящий режим.диалект.MySQLDialect – для MySQL до 5.x
  • орг.спящий режим.диалект.MySQLInnoDBDialect – для MySQL до 5.x с механизмом хранения InnoDB
  • орг.спящий режим.диалект.MySQLMyISAMDialect – для всех версий MySQL с механизмом хранения ISAM

Hibernate поддерживает диалекты SQL для каждой поддерживаемой базы данных.

5. Использование

На данный момент Hibernate 3 полностью настроен на Spring, и мы можем вводить необработанный Hibernate SessionFactory напрямую, когда нам это нужно:

public abstract class FooHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

   protected Session getCurrentSession(){
      return sessionFactory.getCurrentSession();
   }
}

6. Maven

Чтобы добавить зависимости персистентности Spring в pom, см. Пример Spring with Maven – нам нужно будет определить как spring-контекст , так и spring-orm .

Продолжая переходить в спящий режим 3, зависимости Maven просты:


   org.hibernate
   hibernate-core
   3.6.10.Final

Затем, чтобы включить Hibernate для использования своей прокси-модели, нам также нужен javassist :


   org.javassist
   javassist
   3.18.2-GA

Мы собираемся использовать MySQL в качестве нашей базы данных для этого урока, поэтому нам также понадобится:


   mysql
   mysql-connector-java
   5.1.32
   runtime

И, наконец, мы не будем использовать реализацию источника данных Spring – DriverManagerDataSource ; вместо этого мы будем использовать готовое к производству решение пула соединений – пул соединений Tomcat JDBC:


    org.apache.tomcat
    tomcat-dbcp
    7.0.55

7. Заключение

В этом примере мы настроили Hibernate 3 с помощью Spring – как с конфигурацией Java, так и с конфигурацией XML. Реализацию этого простого проекта можно найти в проекте GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.