Перейти к основному содержимому

Начальная загрузка Hibernate 5 с помощью Spring

· 4 мин. чтения

1. Обзор

В этой статье мы обсудим, как загрузить Hibernate 5 с помощью Spring , используя конфигурацию Java и XML.

Эта статья посвящена Spring MVC. В нашей статье Spring Boot with Hibernate описывается, как использовать Hibernate в Spring Boot.

2. Весенняя интеграция

Начальная загрузка SessionFactory с помощью собственного API Hibernate немного сложна и потребует от нас немало строк кода (посмотрите официальную документацию , если вам действительно нужно это сделать).

К счастью, Spring поддерживает загрузку SessionFactory , так что нам нужно всего несколько строк кода Java или конфигурации XML.

3. Зависимости Maven

Давайте начнем с добавления необходимых зависимостей в наш pom.xml :

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>

Модуль spring-orm обеспечивает интеграцию Spring с Hibernate:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

Для простоты мы будем использовать H2 в качестве нашей базы данных:

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>

Наконец, мы собираемся использовать Tomcat JDBC Connection Pooling , который лучше подходит для производственных целей, чем DriverManagerDataSource , предоставляемый Spring:

<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.1</version>
</dependency>

4. Конфигурация

Как упоминалось ранее, Spring поддерживает загрузку Hibernate SessionFactory .

Все, что нам нужно сделать, это определить некоторые bean-компоненты, а также несколько параметров .

В Spring у нас есть два варианта этих конфигураций : на основе Java и на основе XML.

4.1. Использование конфигурации Java

Для использования Hibernate 5 с Spring мало что изменилось со времен Hibernate 4 : мы должны использовать LocalSessionFactoryBean из пакета org.springframework.orm.hibernate5 вместо org.springframework.orm.hibernate4 .

Как и в случае с Hibernate 4 ранее, мы должны определить bean-компоненты для LocalSessionFactoryBean , DataSource и PlatformTransactionManager , а также некоторые свойства, специфичные для Hibernate.

Давайте создадим наш класс HibernateConfig для настройки Hibernate 5 с помощью Spring :

@Configuration
@EnableTransactionManagement
public class HibernateConf {

@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(
{"com.foreach.hibernate.bootstrap.model" });
sessionFactory.setHibernateProperties(hibernateProperties());

return sessionFactory;
}

@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
dataSource.setUsername("sa");
dataSource.setPassword("sa");

return dataSource;
}

@Bean
public PlatformTransactionManager hibernateTransactionManager() {
HibernateTransactionManager transactionManager
= new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}

private final Properties hibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty(
"hibernate.hbm2ddl.auto", "create-drop");
hibernateProperties.setProperty(
"hibernate.dialect", "org.hibernate.dialect.H2Dialect");

return hibernateProperties;
}
}

4.2. Использование XML-конфигурации

В качестве дополнительного варианта мы также можем настроить Hibernate 5 с конфигурацией на основе XML :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="...">

<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource"
ref="dataSource"/>
<property name="packagesToScan"
value="com.foreach.hibernate.bootstrap.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">
create-drop
</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.H2Dialect
</prop>
</props>
</property>
</bean>

<bean id="dataSource"
class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value="sa"/>
</bean>

<bean id="txManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>

Как легко заметить, мы определяем точно такие же bean-компоненты и параметры, что и в конфигурации на основе Java ранее.

Чтобы загрузить XML в контекст Spring , мы можем использовать простой файл конфигурации Java, если приложение настроено с конфигурацией Java:

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

В качестве альтернативы мы можем просто предоставить XML-файл контексту Spring, если общая конфигурация является чисто XML.

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

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

public abstract class BarHibernateDAO {

@Autowired
private SessionFactory sessionFactory;

// ...
}

6. Поддерживаемые базы данных

К сожалению, проект Hibernate не предоставляет официального списка поддерживаемых баз данных.

При этом легко увидеть, может ли поддерживаться конкретный тип базы данных , мы можем взглянуть на список поддерживаемых диалектов .

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

В этом кратком руководстве мы настроили Spring с помощью Hibernate 5 — с конфигурацией Java и XML.

Как всегда, полный исходный код примеров доступен на GitHub .