本文开始,大概用10篇左右的文章来详解spring中事务的使用,吃透spring事务。
本文内容
详解spring中编程式事务的使用。
spring中使用事务的2种方式
spring使事务操作变的异常容易了,spring中控制事务主要有2种方式
- 编程式事务:硬编码的方式
- 声明式事务:大家比较熟悉的注解@Transaction的方式
编程式事务
什么是编程式事务?
通过硬编码的方式使用spring中提供的事务相关的类来控制事务。
编程式事务主要有2种用法
- 方式1:通过PlatformTransactionManager控制事务
- 方式2:通过TransactionTemplate控制事务
方式1:PlatformTransactionManager
这种是最原始的方式,代码量比较大,后面其他方式都是对这种方式的封装。
直接看案例,有详细的注释,大家一看就懂。
案例代码位置
准备sql
DROP DATABASE IF EXISTS javacode2018;
CREATE DATABASE if NOT EXISTS javacode2018;
USE javacode2018;
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(256) NOT NULL DEFAULT '' COMMENT '姓名'
);
maven配置
<!-- JdbcTemplate需要的 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- spring 事务支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
测试代码
代码中会用到JdbcTemplate,对这个不理解的可以看一下:JdbcTemplate使用详解
@Test
public void test1() throws Exception {
//定义一个数据源
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/javacode2018?characterEncoding=UTF-8");
dataSource.setUsername("root");
dataSource.setPassword("root123");
dataSource.setInitialSize(5);
//定义一个JdbcTemplate,用来方便执行数据库增删改查
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//1.定义事务管理器,给其指定一个数据源(可以把事务管理器想象为一个人,这个人来负责事务的控制操作)
PlatformTransactionManager platformTransactionManager = new DataSourceTransactionManager(dataSource);
//2.定义事务属性:TransactionDefinition,TransactionDefinition可以用来配置事务的属性信息,比如事务隔离级别、事务超时时间、事务传播方式、是否是只读事务等等。
TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();