跳到主要内容

第三章 Spring 事务的实现原理

第三章 Spring 事务的实现原理

一、Spring 事务原理

Spring 框架中支持对于事务的管理功能,开发人员使用 Spring 框架能够极大地简化对于数据库事务的管理操作

1.JDBC 直接操作事务

从本质上讲,Spring 事务是对数据库事务的进一步封装。也就是说,如果数据库不支持事务,Spring 也无法实现事务操作

使用JDBC 通过事务的方式操作数据库的步骤如下:
1)加载 JDBC 驱动:

Class.forName("com.mysql.jdbc.Deiver");

2)建立与数据库的连接,后两个参数分别为账号和密码:

Connection conn = DriverManager.getConnection(url, "root", "root");

3)开启事务:

conn.setAutoCommit(true/false);

4)执行数据库的 CRUD 操作:

PrepareStatement ps = conn.prepareStatement(sql);
//新增、修改、删除
ps.excuteUpdate();
//查询
ps.executeQuery();

5)提交或者回滚事务:

//提交事务
conn.commit();
//回滚事务
conn.rollback();

6)关闭连接:

ps.close();
conn.close();

2.使用 Spring 管理事务

如果使用 Spring 的事务功能,则不必手动开启事务、提交事务和回滚事务。而是将开启事务、提交事务和回滚事务的操作全部交由 Spring 框架自动完成,那么 Spring 是如何自动开启事务、提交事务和回滚事务的呢?

简单地说,就是在配置文件或者项目的启动类中配置 Spring 事务相关的注解驱动,在相关的类或者方法上标识 @Transactional 注解,即可开启并使用 Spring 的事务管理功能

Spring 框架在启动的时候会创建相关的 bean 实例对象,并且会扫描标注有相关注解的类和方法,为这些方法生成代理对象。如果扫描到标注有 @Transactional 注解的类或者方法时,会根据 @Transactional 注解的相关参数进行配置注入,在代理对象中会处理相应的事务,对事务进行管理。例如在代理对象中开启事务、提交事务和回滚事务。而这些操作都是 Spring 框架通过 AOP 代理自动完成的,无须开发人员过多关心其中的细节