`

spring 事务管理配置-ibatis

阅读更多
xml配置

Xml代码 
1.<!-- 默认的数据源配置 --> 
2.<bean id="talent.defaultDataSource" 
3.    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
4.    <property name="driverClassName" 
5.        value="${jdbc.default.driverClassName}" /> 
6.    <property name="url" value="${jdbc.default.url}" /> 
7.    <property name="username" value="${jdbc.default.username}" /> 
8.    <property name="password" value="${jdbc.default.password}" /> 
9.</bean> 
10. 
11.<!-- 事务配置 --> 
12.<bean id="talent.defaultTransactionManager" 
13.    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
14.    <property name="dataSource" ref="talent.defaultDataSource" /> 
15.</bean> 
16. 
17.<!-- 配置事务特性 --> 
18.<tx:advice id="txAdvice" 
19.    transaction-manager="talent.defaultTransactionManager"> 
20.    <tx:attributes> 
21.        <tx:method name="add*" propagation="REQUIRED" /> 
22.        <tx:method name="save*" propagation="REQUIRED" /> 
23.        <tx:method name="insert*" propagation="REQUIRED" /> 
24.        <tx:method name="del*" propagation="REQUIRED" /> 
25.        <tx:method name="update*" propagation="REQUIRED" /> 
26.        <tx:method name="main*" propagation="REQUIRED" /> 
27.        <tx:method name="*" read-only="true" /> 
28.    </tx:attributes> 
29.</tx:advice> 
30. 
31.<!-- 配置哪些类的方法需要进行事务管理 --> 
32.<aop:config> 
33.    <aop:pointcut id="allManagerMethod" 
34.        expression="execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))" /> 
35.    <aop:advisor advice-ref="txAdvice" 
36.        pointcut-ref="allManagerMethod" /> 
37.</aop:config> 
38. 
39.<!-- 默认的DaoFactory --> 
40.<bean id="talent.defaultDaoFactory" 
41.    class="com.jstrd.talent.dao.DaoFactory"> 
42.    <constructor-arg value="${jdbc.default.db.dialect}" /> 
43.</bean> 
44. 
45.<!-- 默认的SqlMapClient --> 
46.<bean id="talent.defaultSqlMapClient" 
47.    class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
48.    <property name="dataSource" ref="talent.defaultDataSource" /> 
49.    <property name="configLocation" 
50.        value="classpath:talent/ibatis/sql-map-config.xml" /> 
51.    <!-- 自动加载sql-mapping文件 --> 
52.    <property name="mappingLocations"> 
53.        <value>${ibatis.mappingLocations}</value> 
54.    </property> 
55.    <property name="useTransactionAwareDataSource" value="true"></property> 
56.</bean> 
57. 
58.<!-- 默认的SqlMapDao --> 
59.<bean id="talent.defaultSqlMapDao" 
60.    class="com.jstrd.talent.dao.SqlMapDao"> 
61.    <property name="sqlMapClient" ref="talent.defaultSqlMapClient" /> 
62.</bean> 
63. 
64.<!-- 默认的SqlMapClientTemplate --> 
65.<bean id="talent.defaultSqlMapClientTemplate" 
66.    class="org.springframework.orm.ibatis.SqlMapClientTemplate"> 
67.    <property name="sqlMapClient" ref="talent.defaultSqlMapClient" /> 
68.</bean> 
<!-- 默认的数据源配置 -->
<bean id="talent.defaultDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="${jdbc.default.driverClassName}" />
<property name="url" value="${jdbc.default.url}" />
<property name="username" value="${jdbc.default.username}" />
<property name="password" value="${jdbc.default.password}" />
</bean>

<!-- 事务配置 -->
<bean id="talent.defaultTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="talent.defaultDataSource" />
</bean>

<!-- 配置事务特性 -->
<tx:advice id="txAdvice"
transaction-manager="talent.defaultTransactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="main*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<!-- 配置哪些类的方法需要进行事务管理 -->
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
</aop:config>

<!-- 默认的DaoFactory -->
<bean id="talent.defaultDaoFactory"
class="com.jstrd.talent.dao.DaoFactory">
<constructor-arg value="${jdbc.default.db.dialect}" />
</bean>

<!-- 默认的SqlMapClient -->
<bean id="talent.defaultSqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="talent.defaultDataSource" />
<property name="configLocation"
value="classpath:talent/ibatis/sql-map-config.xml" />
<!-- 自动加载sql-mapping文件 -->
<property name="mappingLocations">
<value>${ibatis.mappingLocations}</value>
</property>
<property name="useTransactionAwareDataSource" value="true"></property>
</bean>

<!-- 默认的SqlMapDao -->
<bean id="talent.defaultSqlMapDao"
class="com.jstrd.talent.dao.SqlMapDao">
<property name="sqlMapClient" ref="talent.defaultSqlMapClient" />
</bean>

<!-- 默认的SqlMapClientTemplate -->
<bean id="talent.defaultSqlMapClientTemplate"
class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="talent.defaultSqlMapClient" />
</bean>


java代码

Java代码 
1.public class MyTransactionTemplate {  
2.    public void addXX() throws Exception {  
3.        SqlMapDao dao = DaoFactory.getSqlMapDao();  
4.        SqlMapClientTemplate sqlMap = dao.getSqlMapClientTemplate();//dao.getSqlMapClientTemplate();//(SqlMapClientTemplate)BeanFactory.getBean("talent.defaultSqlMapClientTemplate");  
5.        sqlMap.update("t_user.delete");  
6.        sqlMap.update("t_user.insert", new TUser(29, "tan29"));  
7.        sqlMap.update("t_user.insert", new TUser(30, "tan30"));  
8.        sqlMap.update("t_user.insert", new TUser(32, "tan32"));  
9. 
10.        sqlMap.update("t_user.updateById", new TUser(29, "tan30"));//这里违反唯一约束,会抛异常的  
11.        sqlMap.update("t_user.updateById", new TUser(29, "tan28"));  
12.    }  
13.} 
public class MyTransactionTemplate {
public void addXX() throws Exception {
SqlMapDao dao = DaoFactory.getSqlMapDao();
SqlMapClientTemplate sqlMap = dao.getSqlMapClientTemplate();//dao.getSqlMapClientTemplate();//(SqlMapClientTemplate)BeanFactory.getBean("talent.defaultSqlMapClientTemplate");
sqlMap.update("t_user.delete");
sqlMap.update("t_user.insert", new TUser(29, "tan29"));
sqlMap.update("t_user.insert", new TUser(30, "tan30"));
sqlMap.update("t_user.insert", new TUser(32, "tan32"));

sqlMap.update("t_user.updateById", new TUser(29, "tan30"));//这里违反唯一约束,会抛异常的
sqlMap.update("t_user.updateById", new TUser(29, "tan28"));
}
}


java代码中,连续几个insert,然后两上update,其中一个update是会抛异常的。但是发现前面的insert已经在数据库中生效了,并不回滚
问题补充:
数据库是mysql5

"MyTransactionTemplate根本没有处于事务中啊"??已经配置在其中了的:
execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))"
问题补充:
谢谢kyo100900的回答!我改成InnoDb后,事务还是没控制住,
日志发现sqlMap.update()每次都会
Fetching JDBC Connection from DataSource
然后
Returning JDBC Connection to DataSource

这里可能也有问题?!
问题补充:
换了oracle环境还是一样,我怀疑是配错了
问题补充:
xml配置
<pre name="code" class="xml">
&lt;!-- 默认的数据源配置 -->
&lt;bean id="talent.defaultDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
&lt;property name="driverClassName"
value="${jdbc.default.driverClassName}" />
&lt;property name="url" value="${jdbc.default.url}" />
&lt;property name="username" value="${jdbc.default.username}" />
&lt;property name="password" value="${jdbc.default.password}" />
&lt;/bean>

&lt;!-- 事务配置 -->
&lt;bean id="talent.defaultTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
&lt;property name="dataSource" ref="talent.defaultDataSource" />
&lt;/bean>

&lt;!-- 配置事务特性 -->
&lt;tx:advice id="txAdvice"
transaction-manager="talent.defaultTransactionManager">
&lt;tx:attributes>
&lt;tx:method name="add*" propagation="REQUIRED" />
&lt;tx:method name="save*" propagation="REQUIRED" />
&lt;tx:method name="insert*" propagation="REQUIRED" />
&lt;tx:method name="del*" propagation="REQUIRED" />
&lt;tx:method name="update*" propagation="REQUIRED" />
&lt;tx:method name="main*" propagation="REQUIRED" />
&lt;tx:method name="*" read-only="true" />
&lt;/tx:attributes>
&lt;/tx:advice>

&lt;!-- 配置哪些类的方法需要进行事务管理 -->
&lt;aop:config>
&lt;aop:pointcut id="allManagerMethod"
expression="execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))" />
&lt;aop:advisor advice-ref="txAdvice"
pointcut-ref="allManagerMethod" />
&lt;/aop:config>

&lt;!-- 默认的DaoFactory -->
&lt;bean id="talent.defaultDaoFactory"
class="com.jstrd.talent.dao.DaoFactory">
&lt;constructor-arg value="${jdbc.default.db.dialect}" />
&lt;/bean>

&lt;!-- 默认的SqlMapClient -->
&lt;bean id="talent.defaultSqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
&lt;property name="dataSource" ref="talent.defaultDataSource" />
&lt;property name="configLocation"
value="classpath:talent/ibatis/sql-map-config.xml" />
&lt;!-- 自动加载sql-mapping文件 -->
&lt;property name="mappingLocations">
&lt;value>${ibatis.mappingLocations}&lt;/value>
&lt;/property>
&lt;property name="useTransactionAwareDataSource" value="true">&lt;/property>
&lt;/bean>

&lt;!-- 默认的SqlMapDao -->
&lt;bean id="talent.defaultSqlMapDao"
class="com.jstrd.talent.dao.SqlMapDao">
&lt;property name="sqlMapClient" ref="talent.defaultSqlMapClient" />
&lt;/bean>

&lt;!-- 默认的SqlMapClientTemplate -->
&lt;bean id="talent.defaultSqlMapClientTemplate"
class="org.springframework.orm.ibatis.SqlMapClientTemplate">
&lt;property name="sqlMapClient" ref="talent.defaultSqlMapClient" />
&lt;/bean>
</pre>

java代码
<pre name="code" class="java">
public class MyTransactionTemplate {
public void addXX() throws Exception {
SqlMapDao dao = DaoFactory.getSqlMapDao();
SqlMapClientTemplate sqlMap = dao.getSqlMapClientTemplate();//dao.getSqlMapClientTemplate();//(SqlMapClientTemplate)BeanFactory.getBean("talent.defaultSqlMapClientTemplate");
sqlMap.update("t_user.delete");
sqlMap.update("t_user.insert", new TUser(29, "tan29"));
sqlMap.update("t_user.insert", new TUser(30, "tan30"));
sqlMap.update("t_user.insert", new TUser(32, "tan32"));

sqlMap.update("t_user.updateById", new TUser(29, "tan30"));//这里违反唯一约束,会抛异常的
sqlMap.update("t_user.updateById", new TUser(29, "tan28"));
}
}
</pre>

java代码中,连续几个insert,然后两上update,其中一个update是会抛异常的。但是发现前面的insert已经在数据库中生效了,并不回滚
<strong>问题补充:</strong>
数据库是mysql5

"MyTransactionTemplate根本没有处于事务中啊"??已经配置在其中了的:
execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))"
<strong>问题补充:</strong>
谢谢kyo100900的回答!我改成InnoDb后,事务还是没控制住,
日志发现sqlMap.update()每次都会
Fetching JDBC Connection from DataSource
然后
Returning JDBC Connection to DataSource

这里可能也有问题?!
<strong>问题补充:</strong>
换了oracle环境还是一样,我怀疑是配错了

调试发现SqlMapClientTemplate的事务管理器为com.ibatis.sqlmap.engine.transaction.TransactionManager@19f9c7a.跟配置的不一样啊
问题补充:
"MyTransactionTemplate根本没有处于事务中啊"??已经配置在其中了的:
execution(* com.jstrd.talent.manager.MyTransactionTemplate.*(..))"
&lt;strong>问题补充:&lt;/strong>
谢谢kyo100900的回答!我改成InnoDb后,事务还是没控制住,
日志发现sqlMap.update()每次都会
Fetching JDBC Connection from DataSource
然后
Returning JDBC Connection to DataSource

这里可能也有问题?!
&lt;strong>问题补充:&lt;/strong>
换了oracle环境还是一样,我怀疑是配错了

调试发现SqlMapClientTemplate的事务管理器为com.ibatis.sqlmap.engine.transaction.TransactionManager@19f9c7a.跟配置的不一样啊
分享到:
评论

相关推荐

    spring-ibatis简单集成

    2. **配置iBatis**:创建一个`SqlSessionFactoryBean`,它负责创建`SqlSessionFactory`,这是iBatis的核心对象。需要配置数据源、配置文件路径等信息。 ```xml &lt;bean id="sqlSessionFactory" class="org.spring...

    Spring-Struts-IBatis-AOP-Transaction

    在 "17-Prj-Spring-Struts-IBatis-AOP-Transaction" 这个项目中,这四个框架被集成在一起,形成一个强大的 web 应用开发解决方案。Spring 作为整个系统的基石,负责依赖注入和事务管理;Struts 2 处理 HTTP 请求,...

    spring-ibatis

    2. **配置iBatis**:创建SqlSessionFactoryBean,这是Spring管理iBatis的核心组件。我们需要配置数据源、SQL映射文件的位置以及其他的iBatis特定设置。 3. **配置Spring**:定义Bean来表示我们的DAO接口和其实现类...

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

    在不使用这个库的情况下,开发者需要手动管理SqlSessionFactory或SqlSession,并确保它们在Spring事务边界内正确关闭。而MyBatis-Spring通过提供SqlSessionTemplate和SqlSessionDaoSupport等工具类,使得MyBatis可以...

    Spring+ibatis 保留ibatis事务的配置

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

    spring-structs2-hibernate-ibatis-API

    在Spring3.0.2-RELEASE-API.chm中,我们可以看到关于Spring的核心模块如Core Container、Data Access/Integration、Web等的详细接口和类的说明,帮助开发者了解如何创建Bean、配置事务、集成数据访问层等。...

    spring+ibatis事务的配置

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

    struts-spring-ibatis

    Struts-Spring-Ibatis是一个经典的Java Web开发框架组合,它结合了Struts的MVC(Model-View-Controller)架构、Spring的依赖注入和事务管理,以及Ibatis的持久层解决方案,以实现高效且灵活的企业级应用开发。...

    夏昕-ibatis 开发指南pdf版

    此外,还将涉及事务管理和异常处理,这些都是在实际开发中必不可少的部分。 接着,书中还会介绍iBatis的高级特性,如结果映射、关联查询、延迟加载等。结果映射允许开发者将数据库查询结果自动映射到Java对象,简化...

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

    7. **AOP事务配置**:接下来,我们需要在Spring中配置AOP事务规则,定义哪些方法需要在事务中执行。通常使用`@Transactional`注解,但要在配置文件中开启注解驱动的事务管理。 ```xml &lt;tx:annotation-driven ...

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

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

    Struts-Spring-Hibernate-MySql-JDK-ibatis

    `ibatis-api.chm`可能包括iBatis的基本配置、SQL映射文件、动态SQL、事务控制等关键内容。 这六个技术的结合,通常被称为SSHSMI(Struts2、Spring、Hibernate、SpringMVC、MySql、iBatis)框架,它们共同构成了一个...

    struts2-spring-ibatis-hibernate(hibernate与ibatis集成)

    3. **配置iBatis**:配置iBatis的SqlMapConfig.xml,指定数据源和Mapper XML文件,Mapper文件中定义SQL语句和结果映射。 4. **整合Struts2**:设置Struts2的配置文件(struts.xml),定义Action及其对应的Action类...

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

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

    Struts2-spring-ibatis 整合及存储过程分页

    5. **配置iBatis**:编写`mybatis-config.xml`,配置数据库连接信息,以及映射文件的位置。创建Mapper接口和XML映射文件,定义SQL语句。 6. **整合Struts2和Spring**:在Struts2的Action类中,通过Spring的`@...

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

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

    spring+struts2+ibatis整合的jar包

    Spring是一个全面的后端应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能;Struts2则是一个用于构建MVC模式的Web应用程序的框架,它简化了前端逻辑的处理;而iBatis则是一个持久层框架,它将...

    spring+ibatis所需要的jar包

    3. iBatis框架的库:ibatis-spring、mybatis、mybatis-ognl等。 4. 数据库驱动:如mysql-connector-java,根据实际使用的数据库选择相应的驱动。 5. 其他可能需要的库,如log4j或slf4j日志库,common-lang等工具类库...

    springmvc-ibatis

    &lt;value&gt;classpath:ibatis-Base.xml &lt;ref bean="dataSource"/&gt; &lt;!-- 配置sqlMapClientTemplate模板 --&gt; &lt;bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis....

Global site tag (gtag.js) - Google Analytics