spring中的事务有两种方式
数据库的事务通用执行流程:
1.事务开启
2.//业务逻辑处理 --》在这期间可以对异常进行捕获,然后回滚,也可以提前提交事务
3.事务提交
用了框架就省略了事务的开启和提交代码
1种是我们常用的声明式事务,如注解,或者配置文件配置的。
如:
@Transactional(rollbackFor = Exception.class) public String insertOrUpdateByOnce(EducationInfo educationInfo) { //这里写核心业务方法 //dosomething return "success"; }
2种是编程式事务,如 TransactionTemplate 类的使用。
如:
@Override public Msg addEmployContractUser(String[] user_codes) { // TODO Auto-generated method stub Msg msg = transactionTemplate.execute(new TransactionCallback<Msg>() { @Override public Msg doInTransaction(TransactionStatus status) { Msg msgShow = new Msg(); int ret = 0; employContractMapper.updateEmploySeq(user_codes); ret = employContractMapper.addEmployContractUser(user_codes); if(ret == 0){ ret = employContractMapper.addEmployContractExists(user_codes); } if(ret>0){ msgShow.setMsg("增加成功"); return msgShow; }else { status.setRollbackOnly(); msgShow.setMsg("最新劳务用工合同信息已存在列表,无需增加"); return msgShow; }} }); return msg; }
从中可以看到编程式事务更加灵活,想回滚随时都可以的,但是声明式事务,只有在捕获到异常才会回滚。
好好学习,天天向上