`

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 配置(包括事务管理)

    spring ibatis 配置spring ibatis 配置spring ibatis 配置spring ibatis 配置

    spring+ibatis事务的配置

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

    Spring+ibatis 保留ibatis事务的配置

    SPRING与IBATIS整合采用保留IBATIS事务,可自己控制回滚!

    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....

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

    SPRING与IBATIS整合采用保留IBATIS事务,可自己控制回滚!

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。 (4) spring-context.jar  这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ...

    跟我学spring3(8-13)

    【第九章】 Spring的事务 之 9.2 事务管理器 ——跟我学spring3 【第九章】 Spring的事务 之 9.3 编程式事务 ——跟我学spring3 【第九章】 Spring的事务 之 9.4 声明式事务 ——跟我学spring3 【第十章】集成其它...

    springmvc+ibatis框架包,使用spring注入,事务等,包都齐全

    自己配置的springmvc+ibatis框架,自己找齐了包,不容易啊,所以上来跟大家分享一下,spring自动注入包,事务包,ibatis包,数据库连接包,都齐全的,仅局限于springmvc+ibatis,这些包不多,不少,刚够

    跟我学spring3(8-13).pdf

    对ORM的支持 之 8.1 概述 8.2 集成Hibernate3 8.3 集成iBATIS 8.4 集成JPA 9.1 数据库事务概述 9.2 事务管理器 9.3 编程式事务 9.4 声明式事务 10.1 概述 10.2 集成Struts1.x 10.3 集成Struts2.x 10.4 集成JSF 11.1 ...

    Spring+Struts+ibatis下配置数据读写分离及事务(一)

    NULL 博文链接:https://wilr.iteye.com/blog/1190524

    Struts2.0+Springframework2.5+ibatis2.3完美整合用户登录及增删改查

    最流行技术Struts2.1 +Spring 2.5.1+ibatis2.3整合开发而成,这与我以前发布的版本中最大特色是整合了Spring2.5.1中的注解功能和半自动化工具ibatis技术,这是本示例的两大特色,简化了配置文件的烦锁,希望能给更多喜欢...

    spring mvc+ibatis+spring注解

    系统采用spring2.5 + ibatis2.3.4,采用注解方式配置,非xml配置方式。包括分页排序查询、新增、修改、删除、登陆验证功能,数据库采用oracle。

    spring4.3.9相关jar包

    spring-beans.jar(必须):这 个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI ...

    JTA事务源码示例

    Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...

    spring applicationContext 配置文件

    -- 配置事务管理器,這個事務性是爭對pdm數據庫的 --&gt; &lt;bean id="transactionManagerPdm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager " p:dataSource-ref="dataSourcePdm"/&gt; ...

    Ibatis_Spring_Demo

    这个Project是关于ibatis 和 spring 框架整合的Demo。 需要向大家说明一下几个需要注意的地方: ...2.ibatis和spring的整合主要是spring的配置文件需要配置ibatis的相关配置,如:数据库连接及事务管理等。

    spring jar 包详解

    (2) spring-beans.jar 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言...

    spring+struts+hibernate+dwr+jstl做的实例

    struts hibernate dwr 与Spring完全结合,实现用户列表、信息增、删、改、查、维护时用户重名提示等功能,还包括页面自动转码设置(web.xml),Hibernate管理服务按Bean名称拦截并进行Spring事务管理,完全由Spring...

    Spring Ibatis Demo

    这是一个servlet + spring + ibatis 的完整例子,里面包含了spring的事务管理以及所有的jar包,下载下来后直接改下数据库配置就可以运行!从界面到action,业务层,dao层有现成的代码!

Global site tag (gtag.js) - Google Analytics