@Transactional(rollbackFor = Exception.class)
①如果使用@Transactional(rollbackFor = Exception.class),那么这个类里面的方法抛出异常,就会回滚,数据库数据也会回滚
②如果不配置rollbackFor,事务只会在遇到运行时异常的时候才会回滚,配置该字段,可以让事务在遇到非运行时异常也回滚
try catch捕获异常时使用@Transactional必须手动回滚
不然事物不起作用。
异常时需要手动回滚事物,不然第一条sql执行成功第二条执行失败
@Transactional
public void csTransactional() {
try {
UaD uaDeputyAccount=new UaD();
uaDeputyAccount.setDeputyAccountId(789789798l);
uaDeputyAccount.setDeputyAccountNumber("123456789");
uaDeputyAccount.setStaffCode("123456789");
uaD.insertSelective(uaDeputyAccount);
int a=1/0;
UaO uaOrganization=new UaO();
uaOrganization.setOrgCode("123456789");
uaO.insertSelective(uaOrganization);
}catch (Exception e){
//手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
System.out.println(e.getMessage());
}
}
@Transactional(readOnly = true)
/**
* 不加@Transactional(readOnly = true)
* 第一个输出25
* 修改数据库为26 在查输出26
*
* 加@Transactional(readOnly = true)
* 第一个输出26
* 修改数据库为27 在查输出26
* readOnly = true 表示只能用作只读,如果操作里有增删改则会报错(org.springframework.dao.TransientDataAccessResourceException: )
*/
@Transactional(readOnly = true)
public void csTransactionalReadonly(){
UaD uaDExample=new UaDeputyAccountExample();
UaDeputyAccountExample.Criteria criteria = uaDeputyAccountExample.createCriteria();
criteria.andDeputyAccountNumberEqualTo("zhusi");
List<UaDe> uaDe = uaDeputyAccountMapper.selectByExample(uaDExample);
System.out.println(uaDeputyAccountList.get(0).getRegionId());
UaD uaDe2=new UaD();
UaD.Criteria criteria2 = uaD.createCriteria();
criteria2.andDeputyAccountNumberEqualTo("zhusi");
List<UaD> uaDe = uaDMapper.selectByExample(uaDe2);
System.out.println(uaDe.get(0).getRegionId());
}