https://dandelioncloud.cn/article/details/1482887703812452354
这个写的挺好
我们需要回滚的是逻辑业务出现异常的状况
而若写在dao层,那么dao层只会出现数据库异常,类似于一个unsigned类型减到负数这样的操作
这样在出现业务逻辑异常时
(比如说有多个dao操作,更新余额,更新库存,首先余额够,那么dao更新余额,那么绝对不会发生异常,但是若库存不够
给它减到负数了,那么绝对会发生异常,即购买失败,但是若此时事务写在dao层,那么一个dao方法就是一个独立的事务
那么这样只会回滚更新库存的操作,而余额却不会回滚)
很可能不会发生回滚
若写在业务service层,那么发生这样的逻辑业务异常时,我们可以手动抛出异常来实现
所需要操作的所有dao层的方法的回滚
即一个service方法出现异常,事务就会回滚,所对应的调用的多个dao层的方法都会回滚