声明式事务:通过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);}}}}?
25108459