1.未加事务注解(或者事务配置), 所以需要手动开启事务和手动提交事务和手动回滚事务
@Autowired
private PlatformTransactionManager txManager;
@Autowired
private ShopGroupBuyDao shopGroupBuyDao;
@GetMapping(value = "/transactionDemo")
public void ceshi() {
// 手动开启事务 start
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = txManager.getTransaction(def);
// 手动开启事务 end
try {
ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper<ShopGroupBuy>()
.eq(ShopGroupBuy::getGroupBuyId, 505));
shopGroupBuy.setGroupBuyTheme("wulin11");
int i = shopGroupBuyDao.updateById(shopGroupBuy);
int a = 1 / 0;
// 手动提交事务 start
txManager.commit(status);
// 手动提交事务 end
if (i > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
} catch(Exception e) {
e.printStackTrace();
// 手动回滚事务 start
txManager.rollback(status);
// 手动回滚事务 end
}
}
2.加事务注解
这里演示加了事务注解(@Transactional(rollback=Exception.class)), 且在代码中也加了try catch相当于没有加事务注解, 所以事务不起作用, 此时就需要在catch里面手动添加事务的回滚,即这样:也可以参考博客:https://blog.csdn.net/qq_26106607/article/details/83827630
@Autowired
private ShopGroupBuyDao shopGroupBuyDao;
@GetMapping(value = "/transactionDemo")
@Transactional(rollbackFor = Exception.class)
public void ceshi() {
try {
ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper<ShopGroupBuy>()
.eq(ShopGroupBuy::getGroupBuyId, 505));
shopGroupBuy.setGroupBuyTheme("wulin11");
int i = shopGroupBuyDao.updateById(shopGroupBuy);
int a = 1 / 0;
if (i > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
} catch(Exception e) {
e.printStackTrace();
// 手动回滚事务 start
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// 手动回滚事务 end
}
}