Spring Hibernate事务配置总结

转载 2015年11月19日 16:27:53

一、TransactionProxyFactoryBean声明式事务配置

<!-- 事务管理器 -->

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

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

    <!-- 事务代理、所有Bean共享一个代理基类-->

    <bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager" ref="transactionManager"></property>

        <property name="transactionAttributes">

            <props>

                <prop key="*">PROPAGATION_REQUIRED</prop>

            </props>

        </property>

    </bean>

    <!-- 指定目标业务Bean -->

    <bean id="tempService" parent="transactionBase" >     

        <property name="target" ref="tempServiceTarget" />      

    </bean>

    <bean id="tempServiceTarget"

       class="com.cj.transaction.service.TempService" abstract="false"

       lazy-init="default" autowire="default" dependency-check="default">

       <property name="userDAO">

           <ref bean="userDAO" />

       </property>

       <property name="deptDAO">

           <ref bean="deptDAO" />

       </property>

    </bean>

二、基于tx/aop声明式事务配置

一、引入aop/tx命名空间

<beans

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

    http://www.springframework.org/schema/tx

    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd ">

 

二、基于tx/aop配置

<!-- 事务管理器 -->

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

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

    <!-- 通过aop定义事务增强切面 -->

    <aop:config>

        <aop:pointcut id="serviceMethod" expression="execution(* com.cj.transaction.service.*.*(..))"/>

        <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>

    </aop:config>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

        <tx:attributes>

            <tx:method name="find*" read-only="false"/>

            <tx:method name="add*" rollback-for="Exception"/>

        </tx:attributes>

    </tx:advice>

 

expression="execution(* com.cj.transaction.service.*.*(..))" 中几个通配符的含义:

第一个 * —— 通配 任意返回值类型
第二个 * —— 通配 包com.cj.transaction.service下的任意class
第三个 * —— 通配 包com.cj.transaction.service下的任意class的任意方法
第四个 .. —— 通配 方法可以有0个或多个参数

 

注意:第一个*后面有一个空格

三、编程式事务

一、使用PlatformTransactionManager

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

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

    <bean id="txDefinition" class="org.springframework.transaction.support.DefaultTransactionDefinition">

        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>

    </bean>

 

public class TempService {

    private UserDAO userDAO;

    private DeptDAO deptDAO;

    private TransactionDefinition txDefinition;

    private PlatformTransactionManager txManager;

   

    public void setUserDAO(UserDAO userDAO) {

       this.userDAO = userDAO;

    }

    public void setDeptDAO(DeptDAO deptDAO) {

       this.deptDAO = deptDAO;

    }

   

    public void setTxDefinition(TransactionDefinition txDefinition) {

       this.txDefinition = txDefinition;

    }

    public void setTxManager(PlatformTransactionManager txManager) {

       this.txManager = txManager;

    }

    public void addTemp(){

       TransactionStatus status = txManager.getTransaction(txDefinition);//

       try {

           User user = new User();

           Dept dept = new Dept();

           user.setRemark("USERREMARK");

           dept.setRemark("DEPT REMARK");

           userDAO.save(user);

           deptDAO.save(dept);

           txManager.commit(status);//提交事務

       } catch (Exception e) {

           txManager.rollback(status);

           e.printStackTrace();

       }

    }

}

 

二、使用TransactionTemplate

    <bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate">

        <property name="transactionManager" ref="transactionManager"></property>

        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>

    </bean>

 

public class Temp1Service {

    private UserDAO userDAO;

    private DeptDAO deptDAO;

    TransactionTemplate txTemplate;

    public void setUserDAO(UserDAO userDAO) {

       this.userDAO = userDAO;

    }

    public void setDeptDAO(DeptDAO deptDAO) {

       this.deptDAO = deptDAO;

    }

    public void setTxTemplate(TransactionTemplate txTemplate) {

       this.txTemplate = txTemplate;

    }

    public void addTemp(){

       txTemplate.execute(new TransactionCallback(){

           public Object doInTransaction(TransactionStatus status){

              try {

                  User user = new User();

                  Dept dept = new Dept();

                  user.setRemark("USERREMARK");

                  dept.setRemark("DEPT REMARK");

                  userDAO.save(user);

                  deptDAO.save(dept);

              } catch (Exception e) {

                  status.setRollbackOnly();//

                  e.printStackTrace();

                  return false;

              }

              return true;

           }

       });

    }

}


spring 配置hibernate事务处理

1.HibernateTransactionManager功能介绍   ① 使用hibernate实现dml语句时,注意sessionFactory.opensession(),打开新的session...
  • u014201191
  • u014201191
  • 2015年02月06日 23:20
  • 1054

Spring管理 hibernate 事务配置的五种方式

Spring配置文件中关于事务配置总是由三个组成部分,DataSource、TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块!   首...
  • zljjava
  • zljjava
  • 2012年05月04日 17:34
  • 27216

spring mvc + hibernate 事务管理 + mysql

一:配置事务:datasource.xml
  • fc403462630
  • fc403462630
  • 2016年01月14日 11:00
  • 930

Spring整合Hibernate 声明式的事务管理

Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: 该类由Spring提供,如果是hibernate...
  • shuyun123456789
  • shuyun123456789
  • 2016年05月18日 10:06
  • 1110

spring-boot 配置hibernate

1.建一个spring-boot的工程,在pom中加springboot-web的依赖 2.在spring-boot的启动类(也是配置类)类上有标注:springbootApplication,这里...
  • a564925512
  • a564925512
  • 2016年08月28日 09:35
  • 5375

spring mvc+hibernate 实现事务管理(全注解版)

为了方便项目变大配置文件变多,用注解代替 *.hbm.xml,,另外用反省实现dao操作,省去每个类一个dao,此处参考了鸵鸟的例子。 实现功能跟http://blog.csdn.net/waiwai...
  • waiwai4701
  • waiwai4701
  • 2014年08月28日 15:15
  • 3466

Java事务管理之Spring+Hibernate

环境与版本除了上一篇中的hibernate的相关lib 外 Java事务管理之Hibernate还需要加入Spring的lib 包和如下的一些依赖包org.aopallianceorg.aspectj...
  • oscar999
  • oscar999
  • 2017年02月16日 17:32
  • 1093

Spring MVC的事务配置和Spring4与Hibernate4的整合

Spring MVC事务配置 要了解事务配置的所有方法,请看一下《Spring事务配置的5种方法》 本文介绍两种配置方法:   一、      XML,使用tx标签配置拦截器实...
  • he90227
  • he90227
  • 2015年05月08日 09:58
  • 4444

spring+hibernate xml和注解方式配置事务

一  如果使用注解方式配置事务 , 那么在applicationContext.xml中要配置好 //打开注解事务 然后在需要事务的方法上面加上如下注解: @Transactional(p...
  • is_zhoufeng
  • is_zhoufeng
  • 2012年05月05日 13:58
  • 5654

Spring整合Hibernate管理事务(xml配置方式)

之前是刚开始使用Spring的事务管理,采用比较简单方便的注解方式进行事务处理,而注解方式进行事务处理需要在每一个要实现事务的类上添加@Transactional注解,在比较小的项目中可以这样来用。但...
  • Julyraining
  • Julyraining
  • 2015年12月09日 16:30
  • 343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Hibernate事务配置总结
举报原因:
原因补充:

(最多只允许输入30个字)