单独开启事务:

在SpringBoot中,可以通过在方法上添加注解@Transactional来开启事务。默认情况下,SpringBoot使用的是基于注解的声明式事务管理。当使用@Transactional注解时,SpringBoot会自动为该方法开启事务,并在方法执行完成后提交事务。如果方法执行过程中发生异常,则会回滚事务。

示例:

@Service
public class UserService {
    
    @Autowired
    private UserDao userDao;
    
    @Transactional
    public void addUser(User user) {
        userDao.addUser(user);
    }
}

在上面的示例中,我们在addUser方法上添加了@Transactional注解,这样就可以开启事务了。当方法执行完成后,SpringBoot会自动提交事务。

提交事务:

当使用基于注解的声明式事务管理时,SpringBoot会自动为我们管理事务的提交和回滚。因此,在一般情况下,我们不需要手动提交或回滚事务。

但是,在某些特殊情况下,我们可能需要手动提交或回滚事务,比如在使用JdbcTemplate等直接操作数据库的情况下。这时,我们可以使用Spring提供的TransactionTemplate来手动提交或回滚事务。

示例:

@Service
public class UserService {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    private TransactionTemplate transactionTemplate;
    
    public void addUser(User user) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update("INSERT INTO user(name, age) VALUES (?, ?)", user.getName(), user.getAge());
            }
        });
    }
    
    public void updateUser(User user) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update("UPDATE user SET name = ?, age = ? WHERE id = ?", user.getName(), user.getAge(), user.getId());
            }
        });
    }
    
    public void deleteUser(Long id) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
                jdbcTemplate.update("DELETE FROM user WHERE id = ?", id);
            }
        });
    }
}

在上面的示例中,我们使用了TransactionTemplate来手动提交或回滚事务。在每个方法中,我们都使用transactionTemplate.execute()方法来执行事务,并在内部传入一个TransactionCallbackWithoutResult对象来执行具体的数据库操作。当方法执行完成后,SpringBoot会自动提交事务。如果方法执行过程中发生异常,则会回滚事务。

springboot单独开启和提交事务

原文地址: https://www.cveoy.top/t/topic/s9I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录