JdbcTemplate中如何处理事务?代码举例讲解

JdbcTemplate提供update()方法进行更新操作,包括:插入、修改、删除。
插入

String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
jdbcTemplate.update(sql, "John", 30);

修改

String sql = "UPDATE user SET name = ? WHERE id = ?"; 
jdbcTemplate.update(sql, "John", 1);

删除

String sql = "DELETE FROM user WHERE id = ?";  
jdbcTemplate.update(sql, 1);

update()方法支持参数绑定,可以防止SQL注入。相比直接使用JDBC, update()方法大大简化了更新操作的代码量。

JdbcTemplate中可以通过setAutoCommit(false)开启事务,然后手动提交commit()或回滚rollback()。

jdbcTemplate.setAutoCommit(false);

try {
    jdbcTemplate.update(sql1);
    jdbcTemplate.update(sql2);
    // ...
    jdbcTemplate.commit();
} catch (Exception e) {
    jdbcTemplate.rollback();
}

此外,在Spring容器中,也可以使用@Transactional注解开启事务:

@Transactional 
public void doSomething() {
    jdbcTemplate.update(sql1);
    jdbcTemplate.update(sql2);
}

doSomething()方法中的更新操作会被Spring的事务管理器管理,出现异常时会自动回滚。

@Transactional还支持设置propagation、isolation、timeout、readOnly等属性,更加灵活地控制事务。

所以,JdbcTemplate通过update()方法和事务管理,可以方便地执行数据库的插入、更新、删除操作。这也是它对持久层访问提供简单易用的访问方案的原因。