`
litxuf
  • 浏览: 122515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转载)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);

    } 

 

 

原文地址:http://www.cnblogs.com/Angi/articles/2007563.html

分享到:
评论

相关推荐

    spring+ibatis事务的配置

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

    Spring+ibatis 保留ibatis事务的配置

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

    spring+ibatis声明式事务Demo_

    这些方法调用Mapper接口执行数据库操作,并由Spring事务管理器确保事务的一致性。 6. **异常处理**:在声明式事务管理中,如果方法执行过程中发生未检查异常(继承自RuntimeException的异常),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 保留IBATIS事务的配置方式

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

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

    spring ibatis整合所需jar包

    Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等特性,而iBatis则是一个优秀的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活和易于维护。将两者整合可以实现松...

    maven搭建SpringMVC+spring+ibatis

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

    spring-ibatis

    总的来说,Spring和iBatis的整合使得开发人员能够利用Spring的高级特性,如依赖注入和事务管理,同时保留iBatis的SQL定制能力。这种结合提高了代码的可维护性,并简化了数据库操作。对于大型项目,这种架构模式是...

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

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

    Struts2 Spring Hibernate IBatis

    Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatis 只需要导入相应的jar包就行了 ,数据库是mysql :数据库名叫做mydatabase,表名...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    它允许开发者轻松管理对象间的依赖关系,同时提供了事务管理、安全控制等企业级服务。 3. **Hibernate**:Hibernate是一个强大的ORM(对象关系映射)框架,用于简化数据库操作。它允许开发者用Java对象来表示数据库...

    Struts+Spring+Ibatis示例

    **Spring** 是一个全面的后端开发框架,提供依赖注入(DI)和面向切面编程(AOP)等特性,同时也支持事务管理、数据访问集成等功能。在本示例中,Spring 可能的角色有: 1. 依赖注入:管理对象之间的关系,降低耦合...

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

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

    spring_ibatis整合案例

    Spring-iBatis会自动处理SQL执行、结果转换以及事务管理。 8. **优点** - **松耦合**:SQL与Java代码分离,降低了维护难度。 - **灵活性**:iBatis允许动态SQL,适应复杂查询需求。 - **事务管理**:Spring的...

    Spring struts ibatis Mysql 集成

    5. **配置iBatis**:编写MyBatis的配置文件,包含数据源、事务管理器和Mapper配置。 6. **数据库连接**:创建MySQL数据源,配置JDBC连接字符串,加载必要的SQL脚本初始化数据库。 7. **编写业务逻辑**:在Service层...

Global site tag (gtag.js) - Google Analytics