在前面的内容,基本已经学习了事务的基本概念以及事务隔离级别等,接下来的几个小节,将学习怎么使用弹簧进行事务管理,在春天中,对事务进行管理有多种方法,主要分别编程式和声明式,本小节主要学习编程式事务管理,后面讲学习春天的声明式事务管理
所谓的编程式事务管理,其实就是通过编写代码的方式来进行事务管理,也就是通过将事务管理的代码硬编码在代码中从而达到事务管理的作用,不过春天的事务管理不同于JDBC原始的事务管理,在JDBC中,对事务进行管理首先要关闭自动提交,然后采用手动配置的方式来控制提交以及异常时回滚,而在春天中,主要是使用春天的接口来管理,具体如下代码所示
这里模拟银行转账的业务,正如我们所知道的,转账其实就是从一个账号减去金额并且给另外一个账号增加对应的金额
春配置文件
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt;豆类xmlns=" http://www.springframework.org/schema/beans " xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”比; & lt; !——开启自动扫描——比; & lt;上下文:component-scan基础包=" cn.xuhuanfeng.transaction "/比; & lt; !——配置数据源,这里采用dbcp——比; & lt; bean id=笆菰础崩?皁rg.apache.commons.dbcp.BasicDataSource”比; & lt;属性名=" url " value=" https://www.yisu.com/zixun/jdbc: mysql://localhost: 3306/春”/比; & lt;属性名=" driverClassName " value=" https://www.yisu.com/zixun/com.mysql.jdbc.Driver "/比; & lt;属性名="用户名" value=" https://www.yisu.com/zixun/root "/比; & lt;属性名="密码" value=" https://www.yisu.com/zixun/huanfeng "/比; & lt;/bean> & lt; !——配置JdbcTemplate——比; & lt; bean id=癹dbcTemplate”类=皁rg.springframework.jdbc.core.JdbcTemplate”比; & lt; !——注入数据源——比; & lt;属性名=笆菰础眗ef=笆菰础?比; & lt;/bean> & lt; !——配置事务管理——比; & lt; bean id=皌ransactionManager”类=皁rg.springframework.jdbc.datasource.DataSourceTransactionManager”比; & lt; !——注入数据源——比; & lt;属性名=笆菰础眗ef=笆菰础?比; & lt;/bean> & lt; !——配置事务管理操作类——比; & lt; bean id=皌ransactionTemplate”类=皁rg.springframework.transaction.support.TransactionTemplate”比; & lt; !——注入事务管理——比; & lt;属性名=" transactionManager " ref=" transactionManager "/比; & lt; !——定义事务隔离级别,这里1代表默认——比; & lt;属性名=" isolationLevel " value=" https://www.yisu.com/zixun/-1 "/比; & lt; !——配置传播行为,0代表PROPAGATION_REQUIRED——比; & lt;属性名=" propagationBehavior " value=" https://www.yisu.com/zixun/0 "/比; & lt; !——由于进行读写操作,所以这里的只读设置为false,默认也是假的,所以可以不用设置——比; & lt;属性名="只读的" value=" https://www.yisu.com/zixun/false "/比; & lt;/bean> & lt;/beans> >之前在配置事务隔离级别的时候,由于这里是采用整数的形式,而不是字符串,一开始在配置的时候有点摸不着头脑,后来查看了对应的源代码之后,发现了对应的常量,将其记录如下
//事务传播行为 int PROPAGATION_REQUIRED=0; int PROPAGATION_SUPPORTS=1; int PROPAGATION_MANDATORY=2; int PROPAGATION_REQUIRES_NEW=3; int PROPAGATION_NOT_SUPPORTED=4; int PROPAGATION_NEVER=5; int PROPAGATION_NESTED=6;//事务隔离级别 int ISOLATION_DEFAULT=1; int ISOLATION_READ_UNCOMMITTED=1; int ISOLATION_READ_COMMITTED=2; int ISOLATION_REPEATABLE_READ=4; int ISOLATION_SERIALIZABLE=8; int TIMEOUT_DEFAULT=1; >之前持久层代码如下所示
@ 公开课AccountDao { @ autowired 私人JdbcTemplate JdbcTemplate; 公共空间transferIn(字符串名称、双钱){ 字符串sql="更新帐户设置=钱+ & # 63;在name=& # 63;”; jdbcTemplate。更新(sql、金钱、名称); } 公共空间transferOut(字符串名称、双钱){ 字符串sql="更新账户设置=钱——& # 63;在name=& # 63;”; jdbcTemplate。更新(sql、金钱、名称); } }春天详解学习之编程式事务管理