开启事务的注解

对两个表的操做 开启事务的注解 在类上标注@EnableTransactionManagement注解
在方法上标注 @Transactional(propagation = Propagation.REQUIRED,rollbackFor=Exception.class)

① 同时删除两张表的记录例子

@Service
@EnableTransactionManagement
public class ApplyServicelmpl implements ApplyService {

        @Resource
	private  ApplyMapper applyMapper;
	
	@Resource
	private  ApplyResMapper  applyResMapper;

        @Override
	@Transactional(propagation = Propagation.REQUIRED,rollbackFor=Exception.class)
	public void deleteApplyById(Integer applyId)throws Exception{
		// TODO Auto-generated method stub
		applyResMapper.deleteByApplyId(applyId);
		applyMapper.deleteApplyById(applyId);
	}

}

②同时添加两张表的记录  事务的管理

@Service
@EnableTransactionManagement
public class ApplyServicelmpl implements ApplyService {
        @Resource
	private  ApplyMapper applyMapper;
	
	@Resource
	private  ApplyResMapper  applyResMapper;

        @Override
	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
	public void addApply(ApplyBean applyBean)throws Exception {
		// TODO Auto-generated method stub
		applyMapper.addApply(applyBean);
		List<ApplyResBean>  applyResList = applyBean.getApplyResList();
		System.out.println(applyResList.size());
		for(ApplyResBean applyResBean:applyResList){
			applyResBean.setApplyId(applyBean.getId());
		}
		applyResMapper.insertApplyResList(applyResList);
	}

}

使用MySQL命令行窗口来进行数据库的事务操作

MySQL数据库默认事务是自动提交的,也就是发一条SQL数据库就执行一条。如果想将多条SQL放置在一个事务中执行,就必须使用如下语句:

start  transaction
sql1
sql2
commit

当开启事务后(start transaction),无论数据库是否对其中的多条SQL语句是否执行成功,只要没有提交事务(commit),都会将之前执行的SQL进行回滚。使数据回到开启事务之前的值。

在MySQL中,与事务相关的有开启事务(START TRANSACTION),提交事务(COMMIT),回滚事务(ROLLBACK)等等,MySQL命令均以分号结束。

查询MySQL下的所有数据库命令 show  databases;


使用某个数据库命令 use demotest;


查看此数据库下的所有表


查询某张表下的记录


假设数据库执行到此发生了错误,我们将MySQL的命令行窗口关闭来代替这样的“错误”:


这时如果我们再重新打开MySQL命令行窗口,重新查看用户的金额,发现由于我们开启事务后,并未提交(commit),因此导致事务回滚,之前执行的SQL语句全部不算成功,因此即使数据库可能发生了错误,用户金额还是能由事务保证不出意外:



数据库中表的记录被彻底改变了。

通过上面两个例子可以看出,如果我们想将多条SQL作为整体执行,只要有一个条SQL执行失败或者数据库突然出错就回滚到最开始执行之前的状态,使用事务是最好的选择。

去这个网址查看  http://www.cnblogs.com/fjdingsd/p/5272952.html



猜你喜欢

转载自blog.csdn.net/onlyxufeifei/article/details/79367527