MySQL 原生SQLJDBCSpring事务使用
Posted AI报道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 原生SQLJDBCSpring事务使用相关的知识,希望对你有一定的参考价值。
限时干货下载:
回复【117】免费获取【Eviews视频学习资料+软件分享!】
来源:http://www.hellodb.net/2011/06/mysql_multi_instance.html
MySQL事务通过简单的Sql语句就可以开启提交或回滚事务,实际使用中特别是Spring对事务的封装,可以让我们通过声明或注解的方式就可以控制事务,还可以支持事务的嵌套、传播。为了理解这样的事务设计,还需要从基本的Sql事务控制开始入手。虽然spring提供了更强大更灵活的事务控制方式,不过有些开发者也许更喜欢原生的事务控制方式,因为这用起来清晰明了。也不需要增加对Spring事务设计学习的成本。
1
原生SQL事务开启方式
注意:MySQL本身是不支持嵌套事务的。在MySQL中开启一个事务后,如果在为提交前又开启了一个事务,则MySQL会自动提交当前事务。而Spring在实现嵌套事务时是通过SavePoint实现。SavePoint介绍:http://dev.mysql.com/doc/refman/5.7/en/savepoint.html
2
MySQL JDBC事务操作方式
3
Spring事务操作
以DataSourceTransactionManage为例
这种在数据源上控制事务的方式设计是在请求的当前线程范围内,从数据中获取一个connection对象,底层通过JDBC的方式操作当前connection的事务,是对原生JDBC的一种封装方式。所以这种事务的有效范围也只限于当前请求中的一个connection。在实际使用中,也许不会像上面这样通过编程的方式控制事务,一般会采用AOP或者加注解的方式,这种方式我们称之为声明式事务控制,原理也是一样,只是采用代理的方式帮我们省去了这些基本上都是重复的事务控制逻辑。
在Spring的事务实现中,PlatformTransactionManager是各种类型的事务的顶层抽象API,下面是Spring事务的类图
4
Spring事务传播属性配置
另外需要注意的地方:如果采用AOP或者注解这种方式,即声明式事务方式,在同一个类中,A方法调用B方法这种情况下,B方法的事务声明并不会生效:http://stackoverflow.com/questions/18590170/transactional-does-not-work-on-method-level
以上是关于MySQL 原生SQLJDBCSpring事务使用的主要内容,如果未能解决你的问题,请参考以下文章