首页 > 编程知识 正文

声明式事务和编程式事务的区别是什么,spring声明式事务和编程式事务

时间:2023-05-05 11:02:03 阅读:272848 作者:2523

区别

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

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

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

声明式事务案例

业务层代码

@Override@Transactionalpublic 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;@Componentpublic class Utils {@Autowiredprivate 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);}}

业务层代码

@Servicepublic class RegisterServiceImpl implements RegisterService {@Autowiredprivate Utils utils;@Overridepublic 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);}}}}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。