Java JDBC模板中的rollback()是如何工作的?

Java JDBC模板中的rollback()是如何工作的?,java,spring,Java,Spring,我正在学习JDBS模板,想知道是否有一种方法可以回滚操作 使用JDBC很容易做到这一点,只要 conn.setAutoCommit(false); // DoinП stuff con.rollback(); 但是,有没有一种方法可以使用JDBS模板执行相同的操作呢?如果您想执行多条语句,并且希望确保执行全部或全部不执行,那么可以使用事务 首先,您必须创建一个会话并开始事务 之后,您可以执行语句并提交事务 但是,如果出现问题,可以回滚(撤消以前的语句) 使用spring,您可以使用@Tra

我正在学习JDBS模板,想知道是否有一种方法可以回滚操作

使用JDBC很容易做到这一点,只要

conn.setAutoCommit(false);
// DoinП stuff
con.rollback();

但是,有没有一种方法可以使用JDBS模板执行相同的操作呢?

如果您想执行多条语句,并且希望确保执行全部或全部不执行,那么可以使用事务

  • 首先,您必须创建一个会话并开始事务
  • 之后,您可以执行语句并提交事务
  • 但是,如果出现问题,可以回滚(撤消以前的语句)
使用spring,您可以使用@Transactional注释

@Transactional
public void transaction() { // Spring will begin transaction
   doTransactionalStatements(); // Spring will rollback in case of RuntimeException
} // Spring will commit transaction

如果要执行多条语句,并确保执行全部或全部不执行,则可以使用事务

  • 首先,您必须创建一个会话并开始事务
  • 之后,您可以执行语句并提交事务
  • 但是,如果出现问题,可以回滚(撤消以前的语句)
使用spring,您可以使用@Transactional注释

@Transactional
public void transaction() { // Spring will begin transaction
   doTransactionalStatements(); // Spring will rollback in case of RuntimeException
} // Spring will commit transaction
你应该在这里用类似的

由于这个
springbootstarter数据jdbc
和springboot自动配置机制,将为您创建一个bean和一个bean

然后,您可以使用非私有方法上的
@Transactional
注释将代码包装到事务中:

@Transactional
public void methodA() {
  jdbcTemplate.update(...);
  jdbcTemplate.update(...);
}
或者,您可以使用以编程方式处理事务

@Service
public class ServiceA {

  private final TransactionTemplate transactionTemplate;

  public SimpleService(PlatformTransactionManager transactionManager) {
    this.transactionTemplate = new TransactionTemplate(transactionManager);
  }

  public void methodA() {
    transactionTemplate.execute(new TransactionCallback<>() {
      public Object doInTransaction(TransactionStatus status) {
        jdbcTemplate.update(...);
        jdbcTemplate.update(...);
        return jdbcTemplate.query(...);
      }
    });
  }
}
@服务
公共类服务{
私有最终交易模板TransactionTemplate;
公共SimpleService(平台事务管理器事务管理器){
this.transactionTemplate=新transactionTemplate(transactionManager);
}
公开无效方法a(){
execute(新建TransactionCallback(){
公共对象doInTransaction(TransactionStatus状态){
jdbcTemplate.update(…);
jdbcTemplate.update(…);
返回jdbcTemplate.query(…);
}
});
}
}
您应该使用类似的

由于这个
springbootstarter数据jdbc
和springboot自动配置机制,将为您创建一个bean和一个bean

然后,您可以使用非私有方法上的
@Transactional
注释将代码包装到事务中:

@Transactional
public void methodA() {
  jdbcTemplate.update(...);
  jdbcTemplate.update(...);
}
或者,您可以使用以编程方式处理事务

@Service
public class ServiceA {

  private final TransactionTemplate transactionTemplate;

  public SimpleService(PlatformTransactionManager transactionManager) {
    this.transactionTemplate = new TransactionTemplate(transactionManager);
  }

  public void methodA() {
    transactionTemplate.execute(new TransactionCallback<>() {
      public Object doInTransaction(TransactionStatus status) {
        jdbcTemplate.update(...);
        jdbcTemplate.update(...);
        return jdbcTemplate.query(...);
      }
    });
  }
}
@服务
公共类服务{
私有最终交易模板TransactionTemplate;
公共SimpleService(平台事务管理器事务管理器){
this.transactionTemplate=新transactionTemplate(transactionManager);
}
公开无效方法a(){
execute(新建TransactionCallback(){
公共对象doInTransaction(TransactionStatus状态){
jdbcTemplate.update(…);
jdbcTemplate.update(…);
返回jdbcTemplate.query(…);
}
});
}
}

您如何进行交易管理?您如何进行交易管理?