Spring事务配置实例

事务

一个使用 MyBatis-spring 的主要原因是它允许MyBatis 参与到 Spring 的事务管理中。而 不是给 MyBatis 创建一个新的特定的事务管理器,MyBatis-Spring 利用了存在于Spring 中的 DataSourceTransactionManager。

一旦 Spring 的PlatformTransactionManager 配置好了,你可以在 Spring 中以你通常的做 法来配置事务。@Transactional 注解和AOP(Aspect-Oriented Program,面向切面编程,译 者注)样式的配置都是支持的。在事务处理期间,一个单独的 SqlSession对象将会被创建 和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。

一旦事务创建之后,MyBatis-Spring将会透明的管理事务。在你的 DAO 类中就不需要额 外的代码了。

标准配置

要 开 启 Spring 的 事 务 处 理 , 在 Spring 的 XML 配 置 文 件中 简 单 创 建 一 个 DataSourceTransactionManager 对象:

<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/>
</bean>
指定的 DataSource 一般可以是你使用 Spring 的任意 JDBCDataSource。这包含了连接 池和通过 JNDI 查找获得的 DataSource。

要注意, 为事务管理器指定的 DataSource 必须和用来创建SqlSessionFactoryBean 的 是同一个数据源,否则事务管理器就无法工作了。

容器管理事务

如果你正使用一个 JEE 容器而且想让 Spring参与到容器管理事务(Container managedtransactions,CMT,译者注)中,那么 Spring 应该使用 JtaTransactionManager 或它的容器指定的子类来配置。做这件事情的最方便的方式是用 Spring 的事务命名空间:

<tx:jta-transaction-manager/>

在这种配置中,MyBatis 将会和其它由 CMT 配置的 Spring事务资源一样。Spring 会自动 使用任意存在的容器事务,在上面附加一个 SqlSession。如果没有开始事务,或者需要基 于事务配置,Spring会开启一个新的容器管理事务。

注 意 , 如 果 你 想 使 用 CMT , 而 不 想 使 用 Spring 的 事 务管 理 , 你 就 必 须 配 置 SqlSessionFactoryBean 来使用基本的 MyBatis 的ManagedTransactionFactory 而不是其 它任意的 Spring 事务管理器:

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="transactionFactory"><beanclass="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/></property> 
</bean>
编程式事务管理

MyBatis 的 SqlSession 提供指定的方法来处理编程式的事务。 但是当使用MyBatis-Spring 时, bean 将会使用 Spring 管理的 SqlSession 或映射器来注入。 那就是说 Spring 通常是处理事务的。

你 不 能 在 Spring 管 理 的 SqlSession 上 调 用SqlSession.commit() , SqlSession.rollback() 或 SqlSession.close() 方 法 。 如 果 这 样做 了 , 就 会 抛 出 UnsupportedOperationException 异常。注意在使用注入的映射器时不能访问那些方法。

无论 JDBC 连接是否设置为自动提交, SqlSession 数据方法的执行或在Spring 事务之外 任意调用映射器方法都将会自动被提交。

如果你想编程式地控制事务,请参考 Spring 手册的 10.6 节。这段代码展示了如何手动使用在 10.6.2 章节描述的 PlatformTransactionManager 来处理事务。

DefaultTransactionDefinitiondef=newDefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status= txManager.getTransaction(def);
try{userMapper.insertUser(user);
}
catch(MyException ex){txManager.rollback(status);throwex;
}
txManager.commit(status);
注意这段代码展示了一个映射器,但它也能和 SqlSession 一起使用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pptv如何绑定邮箱账号

随着社会发展的不断进步&#xff0c;我们要记忆的东西太多了&#xff0c;今天记一个qq账号和密码&#xff0c;明天又记忆一个邮箱账号和密码&#xff0c;可能后天还要记忆一个淘宝账号和密码…&#xff0c;太多的账号和密码&#xff0c;如果设置相同又会被别人盗取&#xff0c;…

Java锁之可重入锁介绍

锁作为并发共享数据&#xff0c;保证一致性的工具&#xff0c;在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利&#xff0c;但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性&…

win7系统蓝屏修复工具如何使用

有网友反映自己在使用win7电脑的时候&#xff0c;电脑突发蓝屏情况&#xff0c;不知道是什么原因造成的。这个时候我们可以借助win7蓝屏修复工具查看分析win7蓝屏原因进行对症解决。那么win7蓝屏修复工具怎么使用?下面小编就教下大家win7蓝屏修复工具使用方法。 win7系统蓝屏…

怎样找到win7系统默认的微信缓存文件夹路径

好多小伙伴使用win7系统的电脑版微信的时候会收到很多文件资料&#xff0c;平时可以进入微信直接获取文件&#xff0c;那么当我们碰到断网的情况下如何准确找到这些文件呢?并且如果想对文件默认保存位置做出修改又该如何解决呢?小伙伴不要急&#xff0c;现证小编就教大家怎样…

Spring AOP事务管理(使用切面把事务管理起来)

在《Spring Transaction 分析事务属性&#xff08;事务的基本概念、配置&#xff09;》基础上 1、使用基于注解的AOP事务管理 <tx:annotation-driven transaction-manager"transactionManager"/> <aop:aspectj-autoproxy /> 探索tx:annotation-…

win7电脑浏览器证书过期的解决方法

最近有很多小伙伴反应win7系统打开电脑浏览器时会出现证书过期或者错误的问题&#xff0c;由于很多小伙伴用的不是微软官方正版授权的系统&#xff0c;所以出现这种情况时无可避免的&#xff0c;这个时候小伙伴们可以仔细校对下电脑系统的日期和时间是否正常&#xff0c;因为有…

数据库事务隔离级别

数据库事务的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable&#xff0c;这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 √: 可能出现 : 不会出现 脏读不可重复读幻读Read uncommitted√√√Read c…

爱奇艺视频有哪些插件?爱奇艺插件怎么卸载

是不是觉得爱奇艺视频占空间大&#xff0c;但是又不想卸载?是不是觉得爱奇艺有很多插件&#xff0c;那么怎么卸载爱奇艺插件呢?流星告诉你&#xff1a; 1、首先打开手机爱奇艺视频&#xff0c;然后在通知栏下方找到【我的】按钮&#xff0c;如图所示&#xff1a; 爱奇艺201…

腾讯视频如何设置定时关机

腾讯视频如何设置定时关机?下面详细介绍操作步骤&#xff1a; 腾讯视频app官方下载_腾讯视频如何设置定时关机 1、打开电脑&#xff0c;进入腾讯视频主屏幕&#xff0c;点击右边的菜单图标。 腾讯视频app官方下载_腾讯视频如何设置定时关机 2、点击下拉菜单的设置。 腾讯…

dataTable删除行

思路大概就是&#xff1a;通过data()循环匹配&#xff0c;返回当前index&#xff0c;然后通过row(index).remove()删除 var removeIndex;//待删除行index var table $("#tb").DataTable(); var datas table.data(); $.each(datas,function(i,d) {if (d[0] data.id) …

centos6.5配置Hadoop环境,运行wordcount例子

安装vmware12&#xff0c;centos6.5&#xff08;还是6.5好&#xff0c;稳定流畅&#xff0c;7界面好看但是虚拟机里面卡死了&#xff09;&#xff0c;删除自带openjdk下载安装jdk1.7配置环境变量 vim /etc/profile->最后加上下面这段 export JAVA_HOME/usr/java/jdk1.7.0_79…

Maven打包自动发布到nexus私服

通过命令 -f指定的pom文件 deploy打包发布 Intellij Idea中可以通过Run-EditConfigurations-""号-Maven新建一个自定义maven脚本&#xff0c;将刚才的发布命令填入Command line中保存即可 先设置pom文件里的build信息&#xff0c;可以是maven-compiler-plugin插件 ma…

搜狗浏览器热搜怎么关 热搜关闭方法详解

要说“搜狗浏览器”中最让人不满的地方&#xff0c;相信不少网友都会投该浏览器页面最下面的“搜狗搜索热搜”一票&#xff0c;毕竟其中经常出现一些用户曾经搜索过的或相关的词语!那么&#xff0c;搜狗浏览器中的热搜该怎么关闭呢?让我们通过下文一起来了解一下。 方法步骤 …

分布式服务框架Dubbo使用小结

介绍&#xff1a; Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA 服务治理方案&#xff0c;每天为2,000个服务提供3,000,000,000次访问量支持&#xff0c;并被广泛应用于阿里巴巴…

Chrome浏览器图片不显示怎么样办 解决方法分享

图片无法正常显示的情况&#xff0c;相信不少经常上网的朋友都曾遇到过。值得一提的是&#xff0c;这种情况大部分都与浏览器本身的缓存文件过多有关!那么&#xff0c;该怎么解决这一问题呢?下面小编就以“Chrome浏览器图片”为例&#xff0c;介绍一下具体的解决方法。 方法步…

AngularJS小结

前段时间做AngularJS的经验总结&#xff0c;这里和大家分享一下&#xff1a; 使用AngularJS的目的是构建一个单页应用&#xff0c;一直是局部刷新&#xff0c;可以达到类似客户端的效果 指令主要参数&#xff1a; restrict : E(元素),A(属性),C(类名),M(注释)&#xff0c;默认为…

如何管理QQ浏览器的扩展工具 QQ浏览器扩展工具的管理方法

QQ的庞大安装量带动了腾讯系的所有产品的安装量&#xff0c;QQ浏览器作为腾讯旗下开发的浏览工具&#xff0c;也拥有不俗的装机量。QQ浏览器不仅是沾了QQ的光&#xff0c;其自身实力也有不俗的&#xff0c;QQ浏览器的应用中心与其他浏览器的扩展中心一般支持用户安装各种浏览器…

Java线程池ThreadPoolExecutor的实例

Java.util中的线程池和Spring框架对这个类的扩展 1.单独通过java里的ThreadPoolExecutor这个类&#xff0c;可以创建线程池&#xff0c;如果系统采用Spring框架设计&#xff0c;可以采用ThreadPoolTaskExecutor这个类来扩展控制&#xff0c;这个对维护线程池 最大值和最小值易扩…

win7系统电脑语言栏怎么更换输入法

我们在使用win7操作系统电脑的时候&#xff0c;有些情况下我们可能会想要更换自己的输入法&#xff0c;但是还是有很多小伙伴不知道应该怎么操作。那么对于这个问题小编觉得我们可以通过电脑键盘上面的快捷键来进行操作&#xff0c;也可以使用鼠标在任务栏唤出相关的设置选项即…

记一次生成唯一ID的问题

之前一直用new Date().getTime()作为ID一直没出现啥问题&#xff0c;但是在测试环境被测试人员发现问题了&#xff0c;最终定位到是一个循环体中多次循环所取到的ID竟然是一样的&#xff01;也就是说系统在1ms之内做了好几次sql操作&#xff01;好吧&#xff0c;万万没想到。。…