1. 개요
이 기사에서는 Java 및 XML 구성을 모두 사용하여 Spring과 함께 Hibernate 5 를 부트스트랩 하는 방법에 대해 논의할 것 입니다.
이 기사는 Spring MVC에 초점을 맞춥니다. 우리 기사 Spring Boot with Hibernate 는 Spring Boot에서 Hibernate 를 사용하는 방법을 설명합니다.
2. 스프링 통합
기본 Hibernate API를 사용하여 SessionFactory 를 부트스트랩하는 것은 약간 복잡하고 몇 줄의 코드가 필요합니다(정말 필요한 경우 공식 문서 를 참조하십시오).
다행히, Spring 지원은 부트 스트랩 SessionFactory를 - 우리는 자바 코드 또는 XML 구성의 몇 줄 필요가 그래서.
3. 메이븐 의존성
먼저 pom.xml에 필요한 의존성을 추가하여 시작하겠습니다 .
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
스프링 ORM 모듈은 최대 절전 모드로 Spring 통합을 제공합니다 :
<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>
마지막으로 Spring에서 제공 하는 DriverManagerDataSource 보다 프로덕션 목적에 더 적합한 Tomcat JDBC Connection Pooling 을 사용할 것입니다 .
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.1</version>
</dependency>
4. 구성
앞서 언급했듯이 Spring은 Hibernate SessionFactory 를 부트스트래핑하는 것을 지원합니다 .
우리가 해야 할 일은 몇 가지 매개변수뿐만 아니라 몇 가지 빈 을 정의 하는 것입니다 .
Spring을 사용하면 이러한 구성 에 대해 Java 기반 및 XML 기반 방식의 두 가지 옵션이 있습니다 .
4.1. 자바 구성 사용
Spring과 함께 Hibernate 5 를 사용하기 위해 Hibernate 4 이후로 거의 변경되지 않았다 . 우리는 org.springframework.orm.hibernate4 대신에 org.springframework.orm.hibernate5 패키지에서 LocalSessionFactoryBean 을 사용해야 한다 .
이전의 Hibernate 4와 마찬가지로 우리는 LocalSessionFactoryBean , DataSource , PlatformTransactionManager에 대한 빈 과 일부 Hibernate 특정 속성 을 정의해야 합니다.
Spring으로 Hibernate 5 를 설정 하기 위해 HibernateConfig 클래스를 생성하자 :
@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 구성 사용
보조 옵션 으로 XML 기반 구성으로 Hibernate 5를 구성 할 수도 있습니다 .
<?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.baeldung.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>
쉽게 볼 수 있듯이 이전의 Java 기반 구성에서와 정확히 동일한 빈과 매개변수를 정의하고 있습니다.
XML을 Spring 컨텍스트로 부트스트랩하기 위해 애플리케이션이 Java 구성으로 구성된 경우 간단한 Java 구성 파일을 사용할 수 있습니다.
@Configuration
@EnableTransactionManagement
@ImportResource({"classpath:hibernate5Configuration.xml"})
public class HibernateXMLConf {
//
}
또는 전체 구성이 순수하게 XML인 경우 XML 파일을 Spring 컨텍스트에 제공할 수 있습니다.
5. 사용법
이 시점에서 Hibernate 5는 Spring으로 완전히 구성되었으며 다음이 필요할 때마다 원시 Hibernate SessionFactory를 직접 주입 할 수 있습니다 .
public abstract class BarHibernateDAO {
@Autowired
private SessionFactory sessionFactory;
// ...
}
6. 지원되는 데이터베이스
불행히도 Hibernate 프로젝트는 지원되는 데이터베이스의 공식 List을 정확히 제공하지 않습니다.
즉 , 특정 데이터베이스 유형이 지원되는지 여부를 쉽게 알 수 있습니다 . 지원되는 방언 List을 볼 수 있습니다 .
7. 결론
이 빠른 사용방법(예제)에서는 Java 및 XML 구성을 모두 사용 하여 Hibernate 5로 Spring을 구성했습니다.
항상 그렇듯이 예제의 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .