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>
相关推荐
很好的spring+ibatis事务的配置文档.
给定的XML配置文件展示了如何在Spring中配置ibatis数据源以及ibatis事务管理器。首先,注释掉的`BasicDataSource`部分是用来配置数据源的,这里没有启用,而是选择了使用JNDI数据源。实际生产环境中,通常会使用...
本示例“spring+ibatis声明式事务Demo”将探讨如何在Spring与iBatis集成环境中使用声明式事务管理。声明式事务管理允许开发者通过配置来控制事务,无需在代码中显式处理事务开始、提交和回滚。 **Spring框架** 是一...
本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...
当我们谈论"spring+ibatis声明式事务Demo"时,我们关注的是如何在Spring框架中利用iBatis实现声明式事务管理。 声明式事务管理是Spring框架提供的一种方便、高效的方式,使得开发者无需手动控制事务的开始、提交、...
根据提供的文件信息,本文将详细解析Spring与iBatis整合时如何保留并使用iBatis事务管理机制,以及如何在应用程序中实现手动控制事务的方法。 ### Spring与iBatis整合 Spring框架是一个全面的企业级应用开发框架,...
以下是关于"spring ibatis 配置(包括事务管理)"的详细说明: 1. **引入依赖**:首先,我们需要在项目中添加Spring和iBatis的相关依赖。通常,这会在Maven或Gradle的配置文件中完成,确保引入了正确的版本。 2. *...
Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等特性,而iBatis则是一个优秀的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活和易于维护。将两者整合可以实现松...
Ibatis与Spring框架集成后,可以使用Spring的DI功能管理数据库连接,同时通过MyBatis-Spring提供的MapperScannerConfigurer自动扫描并注册Mapper接口,实现DAO层的便捷开发。 在SpringMVC+Spring+Ibatis的架构中,...
2. **事务管理**:Spring提供的事务管理功能可以与iBATIS完美结合。通过Spring的声明式事务管理,可以在不改变业务逻辑代码的情况下实现事务控制。 3. **异常处理**:Spring框架中的异常处理机制可以很好地与...
总的来说,Spring和iBatis的整合使得开发人员能够利用Spring的高级特性,如依赖注入和事务管理,同时保留iBatis的SQL定制能力。这种结合提高了代码的可维护性,并简化了数据库操作。对于大型项目,这种架构模式是...
本篇将详细介绍如何在Spring 2.5版本中整合iBATIS 2.3,并利用Spring的声明式事务管理,以提升应用程序的稳定性和可维护性。 首先,我们需要了解Spring 2.5和iBATIS 2.3的基本概念。Spring 2.5是Spring框架的一个...
它允许开发者轻松管理对象间的依赖关系,同时提供了事务管理、安全控制等企业级服务。 3. **Hibernate**:Hibernate是一个强大的ORM(对象关系映射)框架,用于简化数据库操作。它允许开发者用Java对象来表示数据库...
**Spring** 是一个全面的后端开发框架,提供依赖注入(DI)和面向切面编程(AOP)等特性,同时也支持事务管理、数据访问集成等功能。在本示例中,Spring 可能的角色有: 1. 依赖注入:管理对象之间的关系,降低耦合...
它与Spring整合后,可以在Spring的事务管理下执行数据库操作,确保数据的一致性。 在"车辆费用"这个具体的应用场景中,我们可能有一个名为`VehicleExpense`的实体类,包含了车辆费用相关的属性,如费用类型、金额、...
Spring-iBatis会自动处理SQL执行、结果转换以及事务管理。 8. **优点** - **松耦合**:SQL与Java代码分离,降低了维护难度。 - **灵活性**:iBatis允许动态SQL,适应复杂查询需求。 - **事务管理**:Spring的...
5. **配置iBatis**:编写MyBatis的配置文件,包含数据源、事务管理器和Mapper配置。 6. **数据库连接**:创建MySQL数据源,配置JDBC连接字符串,加载必要的SQL脚本初始化数据库。 7. **编写业务逻辑**:在Service层...
4. **SqlMapClientDaoSupport**:抽象基类,用于实现基于IBatis的DAO层,简化了事务管理和错误处理的实现。 #### 三、支持版本 Spring支持IBatis的不同版本,包括1.3.x和2.0版本。这意味着开发者可以根据项目的...
Spring是一个全面的Java应用框架,它提供了依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及各种服务,如事务管理、缓存等。而iBatis(现为MyBatis)则是一个轻量级的...