9.7学习记录

springboot使用事务基于注解方式:@tranctional

Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。

事务的ACID特性

事务必须满足传统事务的特性,即原子性,一致性,分离性和持久性。

  1. 所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。

  2. 事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那么最后A账户一定是450元,B账户一定是350元。

  3. 所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。

  4. 所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。

    最简单的使用

    只需在方法上添加@tranctional注解
    如下的用户注册方法。加入 @Transactional 注解,使用默认配置,抛出异常之后,事务会自动回滚,数据不会插入到数据库。
    @Override
    @Transactional
    public void register(UserModel userModel) throws BusinessException {
    if (userModel==null){
    throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR);
    }
    ValidationResult result=validator.validate(userModel);
    if (result.isHasError()){
    throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,result.getErrMsg());
    }
    //实现model->dataobject方法
    UserDo userDo=convertFromDataObject(userModel);
    try {
    userDoMapper.insertSelective(userDo);
    }catch (DuplicateKeyException ex){
    throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,"手机号已重复注册");
    }
    userModel.setId(userDo.getId());
    UserPassWordDo userPassWordDo=convertPasswordFromDataObject(userModel);
    userpasswordDoMapper.insertSelective(userPassWordDo);
    return;
    }

    @Transactional 注解的属性介绍

    value

    当配置了多个事务管理器时,可以使用该属性指定选择哪个事务管理器。当一个系统访问多个数据源或数据库时,就必须要多个事务管理器。

    propagation 属性

    事务的传播行为,默认值为 Propagation.REQUIRED(如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务)。
    可选值:略

    rollbackFor 属性

    用于指定能够触发事务回滚的异常类型,可以指定多个异常类型。
    其他略

    参考

    https://blog.csdn.net/nextyu/article/details/78669997

转载于:https://www.cnblogs.com/lwblwb/p/11479378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值