Discuss / Java / 使用声明式事务 (ps:看评论说PlatformTransactionManager txManager加不@Autowired都可以用,但是我去掉了它后,不加其他代码,会报空指针异常)

使用声明式事务 (ps:看评论说PlatformTransactionManager txManager加不@Autowired都可以用,但是我去掉了它后,不加其他代码,会报空指针异常)

Topic source

净净一隅

#1 Created at ... [Delete] [Delete and Lock User]

@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("提交事务成功");

    }

}

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

你这声明式事务白学了,让你用声明式事务就是为了不写一行事务开启/提交/回滚的代码,根本不需要引入PlatformTransactionManager

@Component
public class UserService {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Transactional
    public User register(String email, String password, String name) {
        User user = jdbcTemplate.insert("...");
        return user;
    }
}

净净一隅

#3 Created at ... [Delete] [Delete and Lock User]

原来是这个意思,当中有段话直接跳过了


  • 1

Reply