JdbcTemplate如何处理数据库事务?代码举例讲解

在JdbcTemplate中处理数据库事务,可以通过以下步骤进行:

  1. 添加Maven依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
  1. 定义数据源和JdbcTemplate:
@Bean
public DataSource dataSource() {
    return new DriverManagerDataSource(url, username, password); 
}

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}
  1. 编写事务方法:
@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public void insertUser(User user) {
        jdbcTemplate.update("INSERT INTO user (name, age) VALUES (?, ?)", 
            user.getName(), user.getAge());

        // 出现运行时异常会回滚
        int i = 1 / 0; 
    }
}
  • 使用@Transactional注解标注事务方法。
  • 如果方法执行成功,事务提交;如果出现运行时异常,事务回滚。

4. 在Service层调用:

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public void saveUser(User user) {
        userDao.insertUser(user);
    }
}
  1. 在Controller层接收请求并调用:
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/saveUser")
    public void saveUser(@RequestBody User user) {
        userService.saveUser(user);
    }
}

调用/saveUser接口时,由于方法内部出现异常,事务会回滚,数据库不会插入记录。