Spring事务编程概述

什么是事务?

​事务(Transaction):一个最小的不可再分的工作单元。通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元),一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成,事务只和DML语句有关,或者说有DML语句才有事务。业务逻辑不同,DML语句的个数不同。

事务的四大特性(ACID)?

  • 原子性(A):事务是最小单位,不可再分

  • 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败

  • 隔离性(I):事务A和事务B之间具有隔离性

  • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

image-20250127222034350

image-20250127222304081

基于注解声明式事务控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@Configuration
@ComponentScan("com.nju")
@PropertySource("classpath:jdbc.properties")
@MapperScan("com.nju.mapper")
@EnableTransactionManagement
public class SpringConfig {

@Bean
public DataSource dataSource (
@Value("${jdbc.driver}") String driver,
@Value("${jdbc.url}") String url,
@Value("${jdbc.username}") String username,
@Value("${jdbc.password}") String password
) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}

@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}

@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}

}