Spring与Hibernate整合的相关问题和解决方案(整合方案一:dataSource交给Spring来管理)

整合的关键点:

  1. Hibernate的SessionFactory对象交给Spring去创建;
  2. Hibernate的事务交给Spring的声明式事务管理;(Hibernate的操作是基于事务的操作);
整合步骤:

  1.   配置数据源(采用C3P0连接池)

<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
<property name="initialPoolSize" value="3"></property>
<property name="maxPoolSize" value="10"></property>
<property name="maxStatements" value="100"></property>
<property name="acquireIncrement" value="2"></property>

        </bean>

  2.将SessionFactory的创建交给Spring来完成(SessionFactory的创建时由config.configure().buildSessionFactory()方法来获取的,故需要对hibernate.cfg.xml进行配置加载,而不是采用代码的形式进行加载)究其根源还是要获取数据库的连接来对数据库进行操作,所以要配置dataSoure属性的值;

<!-- 创建SessionFactory对象,, -->

<bean    id="sessionfactory" 

                     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

                  <!--  把hibernate配置文件注入给了LocalSessionFactoryBean,也可以把一个数据源dataSource注入给它)所以为了完成spring的依赖注入,Spring提供了LocalSessionFactoryBean这个类.从而创建SessionFactory对象 -->

      <property name="configLocation" value="hibernate.cfg.xml"></property>
      <property name="dataSource"  ref="datasource"></property>

    </bean>

      注:如果缺少datasource属性的配置,会产生如下错误:


                          

 3:配置事务管理器类、事务增强(拦截到方法后如何管理事务)、配置AOP管理

        <!-- 配置事务管理器类  用Hibernate技术连接时,事物管理器类为HibernateTransactionManager,且传入的参数为sessionFactory->

<bean id="tManager"                         class="org.springframework.orm.hibernate3.HibernateTransactionManager">

      <property name="sessionFactory" ref="sessionfactory"></property>
      <!-- <property name="dataSource" ref="datasource"></property> -->

      </bean>

    注:用JDBC技术连接时,事务管理器类为DataSourceTransactionManager;

<!--配置JdbcTemplate ,该类中维护了一个dataSource变量 -->
        <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="datasource"></property>
        </bean>
       

           

      <!--配置事务增强  -->
      <tx:advice id="tx" transaction-manager="tManager">
      <tx:attributes>
      <tx:method name="save*" read-only="false"/>
      </tx:attributes>
      </tx:advice>
     
      <!-- 配置AOP -->
      <aop:config>
      <aop:pointcut expression="execution(* xzx.service.*.*(..))" id="pcut"/>
      <aop:advisor advice-ref="tx" pointcut-ref="pcut"/>
      </aop:config>



注意事项:在Spring和Hibernate整合时,session的获取建议用getCurrentSession();且不用在Hibernate.cfg.xml中进行配置以线程的方式获取session:<property name="hibernate.current_session_context_class">thread</property> 否则会报错。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值