返回
Spring事务学习笔记(一) 初遇篇
后端
2023-11-08 01:44:58
JDBC 中的事务管理
简介
事务是一种数据库操作,它将一系列相关操作分组在一起,确保要么所有操作都成功,要么所有操作都回滚。在 Java 中,可以通过 JDBC API 来管理事务。
JDBC 提供了以下接口来支持事务:
java.sql.Connection
java.sql.Savepoint
java.sql.Statement
java.sql.PreparedStatement
java.sql.CallableStatement
使用这些接口,可以实现基本的事务操作,如:
- 开启事务: 通过
Connection
对象的setAutoCommit(false)
方法来开启事务。 - 执行事务: 通过
Statement
对象的execute()
方法来执行事务。 - 提交事务: 通过
Connection
对象的commit()
方法来提交事务。 - 回滚事务: 通过
Connection
对象的rollback()
方法来回滚事务。 - 事务隔离级别: 可以通过
Connection
对象的setTransactionIsolation()
方法来设置事务隔离级别。 - 事务传播特性: 可以通过
@Transactional
注解来设置事务传播特性。
代码示例:
Connection conn = ...;
try {
conn.setAutoCommit(false); // 开启事务
// 执行事务
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('John Doe', 30)");
stmt.close();
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
conn.rollback();
} finally {
conn.close();
}
Spring 中的事务管理
Spring 提供了更简单、更灵活的事务管理方式。它基于以下核心组件:
PlatformTransactionManager
:事务管理器,用于创建和管理事务。TransactionDefinition
:事务定义,用于定义事务的属性,如隔离级别、传播特性等。TransactionStatus
:事务状态,用于表示事务的当前状态,如活动、挂起、已提交、已回滚等。TransactionSynchronizationManager
:事务同步管理器,用于管理事务上下文。@Transactional
注解:用于在方法或类上声明事务。
在 Spring 中使用事务
在 Spring 中使用事务非常简单,只需要在需要进行事务管理的方法或类上添加 @Transactional
注解即可。
@Transactional
public void save(User user) {
// ...
}
这样,Spring 就会自动帮我们管理事务。可以通过 @Transactional
注解的属性来指定事务的隔离级别、传播特性等。
Spring 事务的传播特性
Spring 事务的传播特性主要有以下几种:
REQUIRED
:如果当前存在事务,则加入该事务;如果当前不存在事务,则创建一个新的事务。REQUIRES_NEW
:创建一个新的事务,并暂停当前事务(如果有的话)。NESTED
:创建一个嵌套事务。SUPPORTS
:如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务方式执行。NOT_SUPPORTED
:以非事务方式执行。NEVER
:如果当前存在事务,则抛出异常;如果当前不存在事务,则以非事务方式执行。
Spring 事务的隔离级别
Spring 事务的隔离级别主要有以下几种:
DEFAULT
:使用数据库的默认隔离级别。READ_UNCOMMITTED
:读取未提交的数据。READ_COMMITTED
:读取已提交的数据。REPEATABLE_READ
:读取已提交的数据,并防止其他事务更新这些数据。SERIALIZABLE
:读取已提交的数据,并防止其他事务读取或更新这些数据。
Spring 事务的回滚机制
Spring 事务的回滚机制主要有以下几种:
RuntimeException
:如果方法抛出RuntimeException
,则回滚事务。CheckedException
:如果方法抛出CheckedException
,则不回滚事务。RollbackException
:如果方法抛出RollbackException
,则回滚事务。
总结
Spring 事务为我们提供了简单、灵活的事务管理方式。通过使用 Spring 事务,我们可以保证数据的完整性和一致性。
常见问题解答
-
什么是事务?
- 事务是一组相关操作,要么全部成功,要么全部回滚。
-
为什么需要事务?
- 事务保证数据的完整性和一致性,防止出现数据不一致的情况。
-
如何使用 Spring 事务?
- 在需要进行事务管理的方法或类上添加
@Transactional
注解即可。
- 在需要进行事务管理的方法或类上添加
-
Spring 事务有哪些传播特性?
REQUIRED
、REQUIRES_NEW
、NESTED
、SUPPORTS
、NOT_SUPPORTED
和NEVER
。
-
Spring 事务有哪些隔离级别?
DEFAULT
、READ_UNCOMMITTED
、READ_COMMITTED
、REPEATABLE_READ
和SERIALIZABLE
。