关闭

Spring Hibernate事务配置总结

标签: hibernatespring
139人阅读 评论(0) 收藏 举报
分类:

一、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;

           }

       });

    }

}


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32617次
    • 积分:635
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:81篇
    • 译文:0篇
    • 评论:1条
    文章分类