Spring 支持事务管理,有两种方式,编程式事务管理和声明式事务管理,下面介绍编程式事务管理。
编程式事务管理实现步骤:
1.在spring 配置文件中声明数据源
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://xxx.xx.xx:3306/mytest?useSSL=false&serverTimezone=Asia/Shanghai"></property><property name="username" value="root"></property><property name="password" value="********"></property></bean>
2.在spring 配置文件中声明事务管理类
<bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>
使用原生的jdbc 操作,这样当中间出现异常的时候,数据会出现相应的回滚,需要注意的是这里需要设置:conn.setAutoCommit(false);
@Overridepublic void tranfMoeny(String money, String fromname, String targetName) {TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务TransactionStatus tstatus = transcationManager.getTransaction(define);//Connection conn = null;try {conn = this.dataSource.getConnection();conn.setAutoCommit(false);Statement ment = conn.createStatement();String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";ment.execute(sql_sub);Integer.parseInt("jjf");String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";ment.execute(sql_add);transcationManager.commit(tstatus);} catch (Exception e) {transcationManager.rollback(tstatus);e.printStackTrace();}}
不用原生的jdbc ,使用jdbcTemplate 进行事务操作,需要在配置文件中首先配置jdbc模板
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>
下面使用jdbcTemplate来进行实现:
@Overridepublic void tranfMoeny(String money, String fromname, String targetName) {TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务TransactionStatus tstatus = transcationManager.getTransaction(define);//try {String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";jdbcTemplate.execute(sql_sub);Integer.parseInt("jjf");String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";jdbcTemplate.execute(sql_add);transcationManager.commit(tstatus);} catch (Exception e) {transcationManager.rollback(tstatus);e.printStackTrace();}}
上面就是通过代码实现Spring 的编程式事务管理,分为使用jdbcTemplate和不使用jdbcTemplate 两种方式,
希望对你有所帮助!