ibatis的事务处理都有哪些配置方式;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ibatis的事务处理都有哪些配置方式;相关的知识,希望对你有一定的参考价值。

参考技术A ibatis 提供了自动化的 JDBC 事务管理机制。
对于传统 JDBC Connection 而言,我们获取 Connection 实例之后,需要调用
Connection.setAutoCommit设定事务提交模式。
基于 JTA 的事务管理机制
JTA 提供了跨数据库连接(或其他 JTA 资源)的事务管理能力。这一点是与 JDBC
Transaction 最大的差异。
外部事务管理
基于 JTA 的事务管理还有另外一个特殊情况,就是利用外部事务管理机制。
对于外部事务管理,我们需要在配置文件中进行如下设定:
<transactionManager type="EXTERNAL">
……
</transactionManager>

spring 事务实现方式都有哪些?

第一种方式:每个Bean都有一个代理

    <bean id="sessionFactory"

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>

    <!-- 定义事务管理器(声明式的事务) -->

    <bean id="transactionManager"

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

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

    </bean>

    <!-- 配置DAO -->

    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">

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

    </bean>

    <bean id="userDao"

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

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

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

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

    <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />

    <!-- 配置事务属性 -->

    <property name="transactionAttributes">

    <props>

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

    </props>

    </property>

    </bean>

    </beans>

    第二种方式:所有Bean共享一个代理基类

    <bean id="sessionFactory"

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>

    <!-- 定义事务管理器(声明式的事务) -->

    <bean id="transactionManager"

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

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

    </bean>

    <bean id="transactionBase"

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

    lazy-init="true" abstract="true">

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

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

    <!-- 配置事务属性 -->

    <property name="transactionAttributes">

    <props>

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

    </props>

    </property>

    </bean>

    <!-- 配置DAO -->

    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">

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

    </bean>

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

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

    </bean>

    </beans>

    第三种方式:使用拦截器

    <bean id="sessionFactory"

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>

    <!-- 定义事务管理器(声明式的事务) -->

    <bean id="transactionManager"

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

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

    </bean>

    <bean id="transactionInterceptor"

    class="org.springframework.transaction.interceptor.TransactionInterceptor">

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

    <!-- 配置事务属性 -->

    <property name="transactionAttributes">

    <props>

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

    </props>

    </property>

    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

    <property name="beanNames">

    <list>

    <value>*Dao</value>

    </list>

    </property>

    <property name="interceptorNames">

    <list>

    <value>transactionInterceptor</value>

    </list>

    </property>

    </bean>

    <!-- 配置DAO -->

    <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">

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

    </bean>

    </beans>

    第四种方式:使用tx标签配置的拦截器

    <bean id="sessionFactory"

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>

    <!-- 定义事务管理器(声明式的事务) -->

    <bean id="transactionManager"

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

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

    </bean>

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

    <tx:attributes>

    <tx:method name="*" propagation="REQUIRED" />

    </tx:attributes>

    </tx:advice>

    <aop:config>

    <aop:pointcut id="interceptorPointCuts"

    expression="execution(* com.bluesky.spring.dao.*.*(..))" />

    <aop:advisor advice-ref="txAdvice"

    pointcut-ref="interceptorPointCuts" />

    </aop:config>

    </beans>

    第五种方式:全注

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="sessionFactory"

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

    <property name="configLocation" value="classpath:hibernate.cfg.xml" />

    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>

    <!-- 定义事务管理器(声明式的事务) -->

    <bean id="transactionManager"

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

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

    </bean>

    </beans>

参考技术A 1使用bean在xml文件中配置
2使用注解@Transaction在你想要实现事务的类或者方法上面配置,并且需要在xml开启注解扫描

以上是关于ibatis的事务处理都有哪些配置方式;的主要内容,如果未能解决你的问题,请参考以下文章

spring 事务实现方式都有哪些?

Mybatis事务处理

spring与ibatis集成之事务部分源码解析

spring管理java类有几种方式

Spring的声明式事务处理怎么配置,可以在提交事务后关闭数据库连接?

SQL Server启动事务有几种方式?