java - 在 jdbcTemplate 或 DataSource 上提交

标签 java spring spring-jdbc

我想使用 jdbcTemplate 进行提交和回滚。

我的问题基于 this thread

我如何提交或回滚,我应该在 jdbcTemplate 上这样做

jdbcTemplate.commit();
jdbcTemplate.rollback();

或者还有其他一些方法可以使用 jdbcTemplate 实现提交和回滚功能。

最佳答案

调用 commitrollback 以编程方式而不是声明方式设置事务边界。

因此,您必须获取 PlatformTransactionManager - 在你的 DAO 中注入(inject)它并自己执行 commit/rollback 操作。

示例代码:

@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private PlatformTransactionManager platformTransactionManager;

 //..

public void daoMethod(params) {
  DefaultTransactionDefinition paramTransactionDefinition = new    DefaultTransactionDefinition();

  TransactionStatus status=platformTransactionManager.getTransaction(paramTransactionDefinition );
try{
  String sqlQuery = "query";
  jdbcTemplate.update(sqlQuery, params);
  platformTransactionManager.commit(status);
}catch (Exception e) {
  platformTransactionManager.rollback(status);
}

另一种方法是获取 TransactionTemplate

示例代码:

@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private TransactionTemplate transactionTemplate;

//..


//for operations where query does not return like delete
public void daoMethod(params) {
  transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    protected void doInTransactionWithoutResult(TransactionStatus paramTransactionStatus) {
    try{
      String sqlQuery = "query";
      jdbcTemplate.update(query, params);
    }catch (Exception e) {
      paramTransactionStatus.setRollbackOnly();
    }
    }
  });
}

//for operations where query does return like insert
public int daoMethod(params) {
return  transactionTemplate.execute(new TransactionCallback<Integer>() {
  public Integer doInTransaction(TransactionStatus paramTransactionStatus) {
    String sqlQuery = "query";
    Object[] params = params;
    int[] types = myTypes;
    return jdbcTemplate.update(sqlQuery,params,types);
   }
 });
}}

关于java - 在 jdbcTemplate 或 DataSource 上提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983352/

相关文章:

spring-jdbc - 如何使用 Spring JDBC 模板连接多个表?

java - 如何停止在 Spring-JDBC 中处理行?

java - 线程为自己抛出 InterruptedException 是否正确?

java - 如何使用 Context 上下文调用方法

java.lang.ClassNotFoundException : org. aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException 异常

java - 使用 JSP 迭代 ArrayList

java - 如何将我的本地 jar 包含到 Maven 中?

java - 我怎样才能只获得 IPv4 地址

java - Springboot TomcatEmbeddedServletContainer KeepAliveTimeout 不工作

java - 如何使用SimpleJdbcInsert和MapSqlParameterSource批量插入?