Spring之事务

事务作用:在数据层保障一系列的数据库操作同成功同失败

Spring事务的作用:在数据层或业务层保障一系列数据库操作的同成功同失败

1、编程式事务

事务功能的相关操作全部通过自己编写代码来实现:

Connection conn = ...;
	
try {
   
   
	
	// 开启事务:关闭事务的自动提交
	conn.setAutoCommit(false);
	
	// 核心操作
	
	// 提交事务
	conn.commit();
	
}catch(Exception e){
   
   
	
	// 回滚事务
	conn.rollBack();
	
}finally{
   
   
	
	// 释放数据库连接
	conn.close();
	
}

编程式的实现方式存在缺陷:

  • 细节没有被屏蔽:具体操作过程中,所有细节都需要程序员自己来完成,比较繁琐。
  • 代码复用性不高:如果没有有效抽取出来,每次实现功能都需要自己编写代码,代码就没有得到复用。

2、声明式事务

既然事务控制的代码有规律可循,代码的结构基本是确定的,所以框架就可以将固定模式的代码抽取出来,进行相关的封装。

封装起来后,我们只需要在配置文件中进行简单的配置即可完成操作。

  • 好处1:提高开发效率
  • 好处2:消除了冗余的代码
  • 好处3:框架会综合考虑相关领域中在实际开发环境下有可能遇到的各种问题,进行了健壮性、性能等各个方面的优化

所以,我们可以总结下面两个概念:

  • 编程式:自己写代码实现功能
  • 声明式:通过配置让框架实现功能

3、事务管理器

①顶级接口

[1]Spring 5.2以前
public interface PlatformTransactionManager {
   
   

	TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;

	void commit(TransactionStatus status) throws TransactionException;

	void rollback(TransactionStatus status) throws TransactionException;

}
[2]从 Spring 5.2开始

PlatformTransactionManager 接口本身没有变化,它继承了 TransactionManager

public interface TransactionManager {
   
   
    
}

TransactionManager接口中什么都没有,但是它还是有存在的意义——定义一个技术体系。

②技术体系

我们现在要使用的事务管理器是org.springframework.jdbc.datasource.DataSourceTransactionManager,将来整合 Mybatis 用的也是这个类。

DataSourceTransactionManager类中的主要方法:

  • doBegin():开启事务
  • doSuspend():挂起事务
  • doResume():恢复挂起的事务
  • doCommit():提交事务
  • doRollback():回滚事务

模拟银行账户间转账业务

1.配置当前接口方法具有事务




    @Transactional
    public void transfer(String out,String in ,Double money) ;
}

2.配置事务管理器和开启注解式事务驱动
①使用全注解
在配置类中添加注解

@EnableTransactionManagement

使用形参注入dataSource


@Bean
public DataSource dataSource() {
   
   
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUrl("jdbc:mysql://a.b.c.com:3306/dbname?useUnicode=true&characterEncoding=UTF-8");
    ds.setUsername("root");
    ds.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值