请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 679|回复: 0

声明式事务和编程式事务的区别

[复制链接]

30

主题

36

帖子

208

积分

中级会员

Rank: 3Rank: 3

积分
208
发表于 2022-5-10 18:48:06 | 显示全部楼层 |阅读模式

区别
声明式事务:通过AOP(面向切面)方式在方法前使用编程式事务的方法开启事务,在方法后提交或回滚。用配置文件的方法或注解方法(如:@Transactional)控制事务。


编程式事务:手动开启、提交、回滚事务。


通俗地去理解两者的区别,即声明式事务只需要“声明”就可以达到事务的效果;编程式事务需要“编程”才可以达到事务效果。



声明式事务案例
业务层代码


@Override
@Transactional
public Map<String, Object> fun() {

}
编程式事务案例
工具类代码


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
@Component
public class Utils {
        @Autowired
        private DataSourceTransactionManager dataSourceTransactionManager;

        // 开启事务
        public TransactionStatus openTx() {
                return dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
        }
        // 提交事务
        public void commitTx(TransactionStatus ts) {
                dataSourceTransactionManager.commit(ts);
        }
        // 回滚事务
        public void rollbackTx(TransactionStatus ts) {
                dataSourceTransactionManager.rollback(ts);
        }
}




业务层代码
@Service
public class RegisterServiceImpl implements RegisterService {
        @Autowired
        private Utils utils;
        @Override
        public void programming(String name,String age,String studentId) {
                TransactionStatus ts = null;
                try {
                        // 开启事务
                        ts = utils.openTx();
                        registerMapper.programming( name, age, studentId);
                        int a=1/0;
                        registerMapper.programming( name, age, studentId);
                        if (ts != null) {
                                // 提交事务
                                utils.commitTx(ts);
                        }
                } catch (Exception e) {
                        if (ts != null) {
                                // 回滚事务
                                utils.rollbackTx(ts);
                        }
                }
        }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-11-28 23:32 , Processed in 0.053947 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表