Bootstrapping Hibernate 5 с Spring

1. Общ преглед

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

Тази статия се фокусира върху Spring MVC. Нашата статия Spring Boot с Hibernate описва как да използвате Hibernate в Spring Boot.

2. Пролетна интеграция

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

За щастие Spring поддържа bootstrapping на SessionFactory - така че се нуждаем само от няколко реда Java код или XML конфигурация.

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

Нека започнем, като първо добавим необходимите зависимости към нашия pom.xml :

 org.hibernate hibernate-core 5.4.2.Final 

Модулът spring-orm осигурява интеграцията на Spring с Hibernate:

 org.springframework spring-orm 5.1.6.RELEASE 

За по-голяма простота ще използваме H2 като наша база данни:

 com.h2database h2 1.4.197 

И накрая, ще използваме Tomcat JDBC Connection Pooling, който се вписва по-добре за производствени цели от DriverManagerDataSource, предоставен от Spring:

 org.apache.tomcat tomcat-dbcp 9.0.1 

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

Както споменахме по-рано, Spring ни подкрепя с зареждане на Hibernate SessionFactory .

Всичко, което трябва да направим, е да дефинираме някои зърна, както и няколко параметъра .

С Spring имаме две възможности за тези конфигурации , базиран на Java и XML-базиран начин.

4.1. Използване на Java Configuration

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

Подобно на Hibernate 4 преди, трябва да дефинираме боб за 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.baeldung.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-базирана конфигурация :

        create-drop   org.hibernate.dialect.H2Dialect              

Както лесно можем да видим, ние дефинираме абсолютно същите компоненти и параметри, както в Java-базирана конфигурация по-рано.

За да заредим XML в контекста на Spring , можем да използваме прост Java конфигурационен файл, ако приложението е конфигурирано с Java конфигурация:

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

Като алтернатива можем просто да предоставим XML файла на Spring Context, ако цялостната конфигурация е чисто XML.

5. Употреба

На този етап Hibernate 5 е напълно конфигуриран с Spring и ние можем да инжектираме суровия Hibernate SessionFactory директно, когато трябва:

public abstract class BarHibernateDAO { @Autowired private SessionFactory sessionFactory; // ... }

6. Поддържани бази данни

За съжаление проектът Hibernate не предоставя точно официален списък с поддържани бази данни.

Като се има предвид това, лесно е да се види дали даден тип база данни може да се поддържа , можем да разгледаме списъка на поддържаните диалекти.

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

В този бърз урок конфигурирахме Spring с Hibernate 5 - както с Java, така и с XML конфигурация.

Както винаги, пълният изходен код на примерите е достъпен в GitHub.