启用事务类1(核心)
@Repository
public class UserDao {
@Resource
private BookDao bookDao;
//启用事务支持,如果没有(rollbackFor = RuntimeException.class)就代表出现任何异常都回滚==========事务
@Transactional(rollbackFor = RuntimeException.class)//如果出现运行时异常才回滚
public int updateUser(User user){
int row = jdbcTemplate.update("update user set username=?,password=? where id=?", user.getUsername(), user.getPassword(), user.getId());
bookDao.updateBook();//该方法里面也开启了事务,里面有事务边界的处理
return row;
}
}
启用事务类2(核心)
//本类是 事务边界:如果一个需求,调用了多个拥有事务的类,此时事务出现边界===========事务
@Repository
public class BookDao {
//有事务就加入到调用者事务中(双方出现异常一起回滚,全部成功就一起提交),没有就创建一个新的事务(本方出现异常就回滚,成功则提交)
@Transactional(propagation = Propagation.REQUIRED)
public void updateBook(){
System.out.println(1/0);
}
}
启动类
@Configuration
@ComponentScan
@EnableTransactionManagement//启用声明式事务支持===========
public class AppConfig {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
UserDao bean = ac.getBean(UserDao.class);
User user = new User(1, "zs", "lll");
System.out.println(bean.updateUser(user));
}
}