Discuss
/
Java
/
使用声明式事务 (ps:看评论说PlatformTransactionManager txManager加不@Autowired都可以用,但是我去掉了它后,不加其他代码,会报空指针异常)
使用声明式事务 (ps:看评论说PlatformTransactionManager txManager加不@Autowired都可以用,但是我去掉了它后,不加其他代码,会报空指针异常)
Topic source你这声明式事务白学了,让你用声明式事务就是为了不写一行事务开启/提交/回滚的代码,根本不需要引入PlatformTransactionManager
@Component
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
@Transactional
public User register(String email, String password, String name) {
User user = jdbcTemplate.insert("...");
return user;
}
}
- 1
净净一隅
@Component
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
PlatformTransactionManager txManager;
@Transactional
public void updatePassword(List<User> users){
TransactionStatus tx=null;
tx=this.txManager.getTransaction(new DefaultTransactionDefinition());
for(User user:users) {
if(1!=jdbcTemplate.update("update user set password = ? where id =?", user.getPassword(), user.getId())){
throw new RuntimeException("Update user's password failed: userid= "+user.getId());
};
}
txManager.commit(tx);
System.out.println("提交事务成功");
}
}