Spring+ibatis:集成时保留ibatis事务的配置与实践

5星 · 超过95%的资源 需积分: 9 8 下载量 44 浏览量 更新于2024-09-17 收藏 4KB TXT 举报
"在Spring与iBatis的整合中,一个常见的需求是保留iBatis的事务管理能力,以便在Spring容器之外也能灵活地控制事务的开始、提交和回滚。本文将详细介绍如何在Spring配置文件中设置iBatis,以便与Spring的事务管理进行无缝集成。 首先,理解Spring与iBatis的整合方式有两种:一是通过XML配置文件中的`<bean>`元素直接管理数据源(非JNDI),二是利用Spring的JNDI支持,通过`<bean>`元素引用JNDI数据源。本文主要关注第一种方式,即不依赖JNDI的数据源配置。 1. 非JNDI数据源配置: 在Spring的XML配置文件中,我们需要定义一个`<bean>`标签来创建`BasicDataSource`实例,这是Spring JDBC的核心组件。例如: ```xml <bean id="jdbcDriver" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@192.168.1.41:1521:express"/> <property name="username" value="iexpress"/> <property name="password" value="poscard"/> </bean> ``` 这里设置了数据源的驱动、URL、用户名和密码,这些都是与数据库连接相关的必要信息。 2. SqlMapClient配置: SqlMapClient是Spring iBatis整合的关键部分,它允许我们在Spring应用程序中操作iBatis的SQL映射文件。在Spring配置中,我们创建一个`SqlMapClientFactoryBean`: ```xml <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!-- 这里需要配置sqlMapConfigLocation属性,指定iBatis的XML映射文件的位置 --> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <!-- 如果需要,可以配置dataSource属性,指向上面定义的jdbcDriver数据源 --> <!-- <property name="dataSource" ref="jdbcDriver"/> --> </bean> ``` `sqlMapConfigLocation`属性指定了iBatis的XML配置文件路径,通常包含了SQL映射和事务管理的配置。Spring会根据这个配置加载iBatis的环境和映射,从而能够执行数据库操作。 3. 保留iBatis事务: 由于Spring默认使用其自己的事务管理机制,如果不希望完全接管iBatis的事务,我们可以选择让iBatis继续管理事务。在iBatis的配置文件(如`sqlMapConfig.xml`)中,可以在`<transactionManager>`元素下设置事务管理器,如`PlatformTransactionManager`,并使用`<transaction>`标签开启事务。例如: ```xml <transactionManager type="JDBC"/> <!-- 或者如果使用CMT(Container Managed Transaction) --> <transactionManager type="RESOURCE_LOCAL"/> <transaction action="begin"> <select id="yourSelectStatement" .../> <!-- 其他SQL映射语句 --> </transaction> ``` 通过这种方式,iBatis会自动管理其内部的事务,而Spring容器则负责全局事务的协调。当在Spring中调用`sqlMapClient`时,Spring不会自动开启事务,需要在调用前后手动处理事务的边界。 总结: 在Spring与iBatis的集成中,通过XML配置文件可以实现保留iBatis的事务管理,同时保持Spring对整体事务协调的控制。关键在于明确区分Spring的事务管理范围和iBatis的局部事务处理。这样,可以根据具体业务场景灵活选择何时使用Spring的事务管理,或者完全由iBatis来管理。