`

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 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

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

    Spring与iBATIS的集成

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

    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的依赖注入(DI)和管理事务的能力,同时享受iBatis提供的SQL映射功能。在本教程中,我们将深入探讨如何实现这一整合。 首先,iBatis是一个轻量级的持久层框架,它将SQL语句直接写...

    struts2+spring+ibatis整合项目实例

    通常会涉及到用户认证、角色分配、权限控制等功能,这些都需要Struts2处理请求,Spring管理业务对象和事务,iBatis执行SQL操作数据库。 在这个整合项目中,开发者需要理解以下几个关键点: - **配置整合**:配置...

    mybaits-spring(ibatis-spring)-1.0.2-bundle

    3. MapperFactoryBean:MyBatis-Spring提供的一种工厂bean,用于将Mapper接口自动注入到Spring容器中,使得可以直接调用Mapper接口的方法进行数据操作,无需创建Mapper实例。 4. TransactionalExecutor:这是...

    spring+ibatis+webwork框架搭配

    **Ibatis**(现更名为**MyBatis**)是一种优秀的持久层框架,它为SQL映射提供了一种简洁的方法。在Spring与MyBatis的集成中,主要涉及以下几个步骤: 1. **引入依赖**:确保项目中已包含MyBatis和Spring的相关依赖...

    Spring+iBatis配置[文].pdf

    Spring框架提供了对iBatis的内建支持,使得开发者可以更方便地使用iBatis进行数据库操作,同时利用Spring的优势进行事务管理和依赖注入。 在Spring中,iBatis的集成主要体现在以下几个方面: 1. **标准JavaBean...

    struts2+spring+ibatis用户管理

    本项目"struts2+spring+ibatis用户管理"是一个整合示例,旨在展示如何将这三个框架集成到一起,实现一个基本的用户管理系统。 **Struts2** 是一个基于MVC设计模式的Action框架,主要用于处理HTTP请求,提供了一系列...

    strusts2+spring+ibatis

    Spring的事务管理功能也能确保用户登录操作的原子性和一致性,尤其是在并发环境下。 iBatis,全名MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在"Struts2+Spring+iBatis"的组合中,...

    Struts+Spring+ibatis

    Action中的业务逻辑方法调用Spring管理的服务对象,这些服务对象再通过iBatis执行SQL操作。通过这种方式,三层架构被有效地解耦,提高了代码的可读性和可维护性。 在提供的文件列表中,我们看到有以下几个关键组件...

    Spring + iBATIS

    Spring 是一个全面的后端开发框架,提供依赖注入、面向切面编程、事务管理等功能,而 iBATIS 是一个优秀的数据持久层框架,它简化了数据库操作,将 SQL 查询与 Java 代码分离。 在 Spring 和 iBATIS 的整合中,主要...

    ssi——struts2+spring+ibatis(登入+增删改查)

    Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们组合起来被称为SSI,常用于构建高效、灵活的企业级应用。本项目通过这三个框架实现了一个基础的登录及增删改查功能,非常适合初学者进行学习和实践。 ...

    基于Spring+Ibatis的安全线程实现

    在Spring框架中,我们可以通过以下几种方式实现线程安全: 1. **ThreadLocal**: Spring提供了ThreadLocalRequestContext,它可以存储并隔离每个线程的请求上下文,例如当前用户信息,避免了多线程环境中的数据污染...

    struts+spring+ibatis配置

    Spring 提供了一个容器,可以管理应用中的对象及其依赖关系,同时提供了数据访问、事务管理、远程服务等丰富的支持。在SSI框架中,Spring 作为整个架构的胶水,将各个部分紧密连接在一起,比如它可以管理 Struts 的...

    SSI框架 spring Struts ibatis

    例如,Struts如何处理用户请求,Spring如何管理对象和事务,以及iBatis如何执行SQL并返回结果。此外,还可以学习到如何设置数据库连接,编写SQL语句,以及如何组织应用的分层架构。 总结而言,这个项目是一个理想的...

    Struct1.2-Spring1.2-IBatis2.1.6 原创 实例

    在Spring1.2中,Ibatis可以通过Spring的DAO支持进行集成,实现更简洁的事务管理和数据库操作。 这个实例很可能是演示了如何将这三个框架整合在一起,创建一个完整的Java Web应用。通常,Structs负责处理HTTP请求,...

    struts+spring+ibatis框架集成.pdf

    iBATIS与Spring的集成可以实现更高级的事务管理和数据源配置。 集成这三个框架,首先需要从官方网站下载相应的框架和插件。Struts2可以从Apache官网获取,下载Full Distribution版本以包含所有必要的组件。为了支持...

    基于struts+spring+ibatis的轻量级J2EE开发

    例如,通过Spring AOP实现事务管理,通过Spring Context的BeanFactory功能实现业务层组件的依赖注入,从而简化了代码结构,提高了代码的可维护性。 #### 5. 结束语 基于Struts+Spring+Ibatis的轻量级J2EE开发方案...

Global site tag (gtag.js) - Google Analytics