`
zengshaotao
  • 浏览: 788859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring管理ibatis事务的方式

 
阅读更多

Spring管理iBatis事务

<sqlMapConfig>
    
<sqlMap resource="com/angi/ibatis/maps/User.xml" />
</sqlMapConfig>
以上配置省去了transactionManager的配置,就会使用external(外部)事务管理(ExternalTransaction),即等同如下配置:
复制代码
<sqlMapConfig>
    
<transactionManager type="EXTERNAL">
                
<!--这个数据源其实没有什么意义,还是取上面的省略方式吧-->
        
<dataSource type="DBCP">
        
</dataSource>
    
</transactionManager>
    
<sqlMap resource="com/angi/ibatis/maps/User.xml" />
</sqlMapConfig>
复制代码
1、TransactionProxyFactoryBean
复制代码
<?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:p="http://www.springframework.org/schema/p"
    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-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
<!-- DataSource -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        
<property name="driverClassName">
            
<value>com.mysql.jdbc.Driver</value>
        
</property>
        
<!--<property name="defaultAutoCommit" value="false"/>-->
        
<property name="url">
            
<value>jdbc:mysql://localhost/test</value>
        
</property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value>mysql</value>
        
</property>
    
</bean>
    
<!-- Spring iBatis Template -->
    
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="configLocation" value="SqlMapConfig.xml" />
        
<property name="dataSource" ref="dataSource" />
    
</bean>
    
<bean id="transactionManager"
        class
="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        
<property name="dataSource">
            
<ref local="dataSource" />
        
</property>
    
</bean>
    
<bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        
<property name="sqlMapClient">
            
<ref bean="sqlMapClient" />
        
</property>
    
</bean>
    
<bean id="userService" class="com.angi.ibatis.service.UserService">
        
<property name="userDao">
            
<ref bean="userDAO" />
        
</property>
    
</bean>
    
<bean id="userServiceProxy"
        class
="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        
<property name="transactionManager">
            
<ref bean="transactionManager" />
        
</property>
        
<property name="target">
            
<ref local="userService" />
        
</property>
        
<property name="transactionAttributes">
            
<props>
                
<!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
                
<prop key="*">PROPAGATION_REQUIRED</prop>
            
</props>
        
</property>
    
</bean>
</beans>
复制代码
2、TransactionInterceptor
复制代码
<?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:p="http://www.springframework.org/schema/p"
    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-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
<!-- DataSource -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        
<property name="driverClassName">
            
<value>com.mysql.jdbc.Driver</value>
        
</property>
        
<!--<property name="defaultAutoCommit" value="false"/>-->
        
<property name="url">
            
<value>jdbc:mysql://localhost/test</value>
        
</property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value>mysql</value>
        
</property>
    
</bean>
    
<!-- Spring iBatis Template -->
    
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="configLocation" value="SqlMapConfig.xml" />
        
<property name="dataSource" ref="dataSource" />
    
</bean>
    
<bean id="transactionManager"
        class
="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        
<property name="dataSource">
            
<ref local="dataSource" />
        
</property>
    
</bean>
    
<bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        
<property name="sqlMapClient">
            
<ref bean="sqlMapClient" />
        
</property>
    
</bean>
    
<bean id="userService" class="com.angi.ibatis.service.UserService">
        
<property name="userDao">
            
<ref bean="userDAO" />
        
</property>
    
</bean>
    
<bean
        
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        
<property name="beanNames">
            
<list>
                
<value>userService</value>
            
</list>
        
</property>
        
<property name="interceptorNames">
            
<list>
                
<value>transactionInterceptor</value>
            
</list>
        
</property>
    
</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>
</beans>
复制代码
3、AOP和TX配置
复制代码
<?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:p="http://www.springframework.org/schema/p"
    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-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
<!-- DataSource -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method
="close">
        
<property name="driverClassName">
            
<value>com.mysql.jdbc.Driver</value>
        
</property>
        
<property name="url">
            
<value>jdbc:mysql://localhost/test</value>
        
</property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value>mysql</value>
        
</property>
    
</bean>
    
<!-- Spring iBatis Template -->
    
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="configLocation" value="SqlMapConfig.xml" />
        
<property name="dataSource" ref="dataSource" />
    
</bean>
    
<bean id="transactionManager"
        class
="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        
<property name="dataSource" ref="dataSource" />
    
</bean>
    
<!-- 需要引入aop的命名空间 -->
    
<aop:config>
        
<!-- 切入点指明了在所有方法产生事务拦截操作 -->
        
<aop:pointcut id="serviceMethods"
            expression
="execution(* com.angi.ibatis.service.*.*(..))" />
        
<!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->
        
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
    
</aop:config>
    
<!-- 需要引入tx的命名空间 -->
    
<!-- 这是事务通知操作,使用的事务管理器引用自 transactionManager -->
    
<tx:advice id="txAdvice" transaction-manager="transactionManager">
        
<tx:attributes>
            
<!-- 指定哪些方法需要加入事务,这里懒惰一下全部加入,可以使用通配符来只加入需要的方法 -->
            
<tx:method name="*" propagation="REQUIRED" />
        
</tx:attributes>
    
</tx:advice>
    
<bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        
<property name="sqlMapClient">
            
<ref bean="sqlMapClient" />
        
</property>
    
</bean>
    
<bean id="userService" class="com.angi.ibatis.service.UserService">
        
<property name="userDao">
            
<ref bean="userDAO" />
        
</property>
    
</bean>
</beans>
复制代码
4、anotation
复制代码
<?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:p="http://www.springframework.org/schema/p"
    xmlns:tx
="http://www.springframework.org/schema/tx"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    
<!-- 需要引入tx的命名空间 -->
    
<tx:annotation-driven transaction-manager="transactionManager" />
    
<!-- DataSource -->
    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        
<property name="driverClassName">
            
<value>com.mysql.jdbc.Driver</value>
        
</property>
        
<!--<property name="defaultAutoCommit" value="false"/>-->
        
<property name="url">
            
<value>jdbc:mysql://localhost/test</value>
        
</property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value>mysql</value>
        
</property>
    
</bean>
    
<!-- Spring iBatis Template -->
    
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="configLocation" value="SqlMapConfig.xml" />
        
<property name="dataSource" ref="dataSource" />
    
</bean>
    
<bean id="transactionManager"
        class
="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        
<property name="dataSource">
            
<ref local="dataSource" />
        
</property>
    
</bean>
    
<bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        
<property name="sqlMapClient">
            
<ref bean="sqlMapClient" />
        
</property>
    
</bean>
    
<bean id="userService" class="com.angi.ibatis.service.UserService">
        
<property name="userDao">
            
<ref bean="userDAO" />
        
</property>
    
</bean>
</beans>
复制代码
Java代码:
复制代码
@Transactional
    
public void doTransaction() {
        User user 
= new User();
        user.setName(
"11111");
        user.setSex(
1);
        userDao.saveUser(user);
        User user1 
= new User();
        user1.setName(
"Angikkk");
        user1.setSex(
1);
        userDao.saveUser(user1);
复制代码

    } 

分享到:
评论

相关推荐

    spring+ibatis事务的配置

    很好的spring+ibatis事务的配置文档.

    Spring+ibatis 保留ibatis事务的配置

    这种配置方式使得ibatis能够在不依赖Spring事务管理的情况下独立工作,从而实现了对ibatis事务的保留。 #### 四、实现自定义控制回滚 当保留ibatis事务后,开发者可以在业务逻辑中更自由地控制事务的提交和回滚。...

    spring+ibatis声明式事务Demo_

    **声明式事务管理** 是Spring提供的事务管理方式之一,主要通过AOP实现。在Spring中,可以使用`@Transactional`注解在方法级别声明事务边界。当该方法执行时,Spring会自动处理事务的开启、提交或回滚,这极大地简化...

    SPRING IBATIS 保留IBATIS事务的配置方式

    根据提供的文件信息,本文将详细解析Spring与iBatis整合时如何保留并使用iBatis事务管理机制,以及如何在应用程序中实现手动控制事务的方法。 ### Spring与iBatis整合 Spring框架是一个全面的企业级应用开发框架,...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...

    spring ibatis 配置(包括事务管理)

    以下是关于"spring ibatis 配置(包括事务管理)"的详细说明: 1. **引入依赖**:首先,我们需要在项目中添加Spring和iBatis的相关依赖。通常,这会在Maven或Gradle的配置文件中完成,确保引入了正确的版本。 2. *...

    spring+ibatis声明式事务Demo

    当我们谈论"spring+ibatis声明式事务Demo"时,我们关注的是如何在Spring框架中利用iBatis实现声明式事务管理。 声明式事务管理是Spring框架提供的一种方便、高效的方式,使得开发者无需手动控制事务的开始、提交、...

    spring ibatis整合所需jar包

    在Java Web开发中,Spring和iBatis是两个非常重要的框架...这种整合方式允许开发者充分利用Spring的高级特性,如AOP事务管理,同时享受iBatis带来的灵活SQL操作。在实际项目中,这可以大大提高开发效率,降低维护成本。

    Spring与iBATIS的集成

    2. **事务管理**:Spring提供的事务管理功能可以与iBATIS完美结合。通过Spring的声明式事务管理,可以在不改变业务逻辑代码的情况下实现事务控制。 3. **异常处理**:Spring框架中的异常处理机制可以很好地与...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    本篇将详细介绍如何在Spring 2.5版本中整合iBATIS 2.3,并利用Spring的声明式事务管理,以提升应用程序的稳定性和可维护性。 首先,我们需要了解Spring 2.5和iBATIS 2.3的基本概念。Spring 2.5是Spring框架的一个...

    maven搭建SpringMVC+spring+ibatis

    Ibatis与Spring框架集成后,可以使用Spring的DI功能管理数据库连接,同时通过MyBatis-Spring提供的MapperScannerConfigurer自动扫描并注册Mapper接口,实现DAO层的便捷开发。 在SpringMVC+Spring+Ibatis的架构中,...

    spring-ibatis

    "spring-ibatis"项目的核心目标就是将Spring的依赖注入特性和iBatis的数据访问能力结合起来,使得开发人员可以更方便地管理数据库事务,同时保持代码的清晰和解耦。 首先,让我们深入了解这两个框架。Spring是一个...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    通过这种方式,开发人员可以利用Struts2的控制层、Spring的服务层管理和依赖注入,以及Hibernate或Ibatis的数据访问能力,构建出高效且可扩展的Web应用。这些整合示例可以帮助初学者快速理解各个组件的交互方式,...

    Struts+Spring+Ibatis示例

    整合这三个框架,Struts 负责接收和转发HTTP请求,Spring 管理业务对象和事务,而 iBatis 处理数据库交互。这种组合可以实现松散耦合的架构,便于代码的维护和扩展。 在源码中,你可能会看到以下结构: - `struts`...

    Spring对IBatis的整合

    ### Spring对IBatis的整合 #### 一、Spring与IBatis整合概述 Spring框架与IBatis(现称为...通过本章节的学习,开发者应该能够掌握如何使用Spring来有效地管理IBatis相关的事务处理、异常处理以及数据访问逻辑。

    Spring struts ibatis Mysql 集成

    连接MySQL数据库通常需要JDBC驱动,而Spring可以管理这些数据源,提供事务控制。 **IntelliJ IDEA**: IntelliJ IDEA 9是JetBrains公司的一款强大的Java集成开发环境。它支持多种框架和库,包括Spring、Struts和...

    spring_ibatis整合案例

    Spring提供了基于注解或XML的事务管理方式。通过`@Transactional`注解,可以在Service层的方法上声明事务,实现自动的事务控制。在XML配置中,可以通过`&lt;tx:annotation-driven/&gt;`启用注解驱动的事务管理。 6. **...

    struts+spring+ibatis做的一个增删改查例子

    它与Spring整合后,可以在Spring的事务管理下执行数据库操作,确保数据的一致性。 在"车辆费用"这个具体的应用场景中,我们可能有一个名为`VehicleExpense`的实体类,包含了车辆费用相关的属性,如费用类型、金额、...

    spring-ibatis简单集成

    7. **事务管理**:Spring提供了声明式事务管理,只需在Service层的方法上添加@Transactional注解,就可以开启事务。 通过这样的集成,Spring和iBatis可以协同工作,提供一套完整的数据访问解决方案。这种集成方式...

Global site tag (gtag.js) - Google Analytics