事务管理接口,负责事务的创建,提交,回滚,三个操作

//创建事务,返回该事务的状态
TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;

//提交事务,具体提交哪个事务,由参数status决定
void commit(TransactionStatus status) throws TransactionException;
//事务回滚,滚到哪里,由参数status决定,也可以理解由
//TransactionStatus中的savepoint属性决定
void rollback(TransactionStatus status) throws TransactionException;

PlatformTransactionManager接口最重要的实现类是DataSourceTransactionManager,下面的事例使用该实现类演示事务的提交

示例1:手动提交事务,这个例子依赖于spring容器

@Autowired
DataSourceTransactionManager tx

public void aa(){
DefaultTransactionDefinition def=new DefaultTransactionDefinition();
//这个地方可以根据自己需要选择传播行为和隔离级别
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status=tx.getTransaction(def);
try{
自己的各种业务操作
tx.commit();//然后这里提交
}catch(Exception e){
tx.rollback(status);//报错这里回滚
}
}

示例2:要想理解spring,就不应该依赖spring容器,同样是个手动提交事务,下面这个例子不再依赖spring容器

public static void main(String[] args) throws SQLException {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/swttest?serverTimezone=UTC&&useSSL=false");
ds.setUsername("root");
ds.setPassword("123456");
PlatformTransactionManager manager = new DataSourceTransactionManager(ds);
DefaultTransactionAttribute td = new DefaultTransactionAttribute();
TransactionStatus status = manager.getTransaction(td);

Map<Object, Object> resourceMap = TransactionSynchronizationManager.getResourceMap();
ConnectionHolder connectionHolder = (ConnectionHolder) resourceMap.get(ds);
Connection conn = connectionHolder.getConnection();
conn.prepareStatement("insert into t1(value) values ('二抱三抱是真抗冻')").execute();
manager.commit(status);
// manager.rollback(status);
}