Spring休眠4

1.概述

本文将重点介绍如何使用Spring设置Hibernate 4 –我们将研究如何使用Java和XML配置来使用Hibernate 4配置Spring 3。 当然,该过程的某些部分对于Hibernate 3文章是通用

2. Maven

要将Spring Persistence依赖项添加到项目pom.xml中 ,请参阅专注于Spring和Maven依赖项文章

继续使用Hibernate 4,Maven依赖项很简单:

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

然后,要使Hibernate使用其代理模型,我们还需要javassist:

<dependency>
   <groupId>org.javassist</groupId>
   <artifactId>javassist</artifactId>
   <version>3.18.0-GA</version>
</dependency>

并且由于我们将在本教程中使用MySQL,因此我们还需要:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.26</version>
   <scope>runtime</scope>
</dependency>

最后,我们使用适当的连接池,而不是仅开发人员的Spring实现– DriverManagerDataSource 。 我们在这里使用Tomcat JDBC连接池

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

3. Hibernate 4的Java Spring配置

在项目中使用Hibernate 4,从Hibernate 3设置迁移时,配置方面需要进行一些更改。

从Hibernate 3升级时,主要不同之处是使用Hibernate 4创建SessionFactory的方式。

它取代从Hibernate3的包老AnnotationSessionFactoryBean -这是现在从hibernate4包使用LocalSessionFactoryBean的完成。 新的FactoryBean承担同样的责任-从注释扫描中引导SessionFactory 。 这是必需的,因为从Hibernate 3.6开始,旧的AnnotationConfiguration 已合并Configuration中 ,因此新的Hibernate 4 LocalSessionFactoryBean使用此新的Configuration机制。

还值得一提的是,在Hibernate中4,Configuration.buildSessionFactory方法和机制也被弃用 赞成 Configuration.buildSessionFactory(ServiceRegistry) -这春天LocalSessionFactoryBean中尚未使用。

Hibernate 4的Spring Java配置:

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.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.google.common.base.Preconditions;

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

   @Autowired
   private Environment env;

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(new String[] { "org.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
   public HibernateTransactionManager transactionManager() {
      HibernateTransactionManager txManager = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory().getObject());

      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"));
            setProperty("hibernate.globally_quoted_identifiers", "true");
         }
      };
   }
}

4. Hibernate 4的XML Spring配置

类似的, Hibernate 4也可以使用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:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.2.xsd">

   <context:property-placeholder location="classpath:persistence-mysql.properties" />

   <bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="packagesToScan" value="org.baeldung.spring.persistence.model" />
      <property name="hibernateProperties">
         <props>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         </props>
      </property>
   </bean>

   <bean id="dataSource" 
    class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}" />
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.user}" />
      <property name="password" value="${jdbc.pass}" />
   </bean>

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

   <bean id="persistenceExceptionTranslationPostProcessor" 
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

</beans>

要将XML引导到Spring Context中,如果应用程序配置了Java配置,我们可以使用一个简单的Java配置文件:

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

或者,如果整体配置是纯XML的,我们可以简单地将XML文件提供给Spring Context。

对于这两种配置,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

5. Spring,Hibernate和MySQL

Hibernate 3支持的驱动程序和方言针对Hibernate 3 进行了广泛讨论 -一切仍然适用于Hibernate 4。

6.用法

至此,Hibernate 4已通过Spring进行了完整配置,我们可以在需要时直接注入原始的Hibernate SessionFactory

public abstract class BarHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

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

这里重要的一点是,这是现在推荐的使用Hibernate API的方法–旧的HibernateTemplate不再包含在新的org.springframework.orm.hibernate4包中,因为它不应与Hibernate 4一起使用。

7.结论

在此示例中, 我们使用Hiberate 4配置了Spring –都使用Java和XML配置。 这个简单项目的实现可以在github项目中找到–这是一个基于Eclipse的项目,因此应易于导入和运行。

参考:来自bakgung博客的JCG合作伙伴 Eugen Paraschiv的Spring的Hibernate 4

翻译自: https://www.javacodegeeks.com/2013/05/hibernate-4-with-spring.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值