侧边栏壁纸
  • 累计撰写 101 篇文章
  • 累计创建 89 个标签
  • 累计收到 9 条评论

spring系列笔记 - 第二十章 Spring的事务处理

bearjun
2021-07-16 / 0 评论 / 0 点赞 / 1,300 阅读 / 1,607 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-07-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

什么是事务

事务:保证业务操作完整性的一种数据库机制

事务的四个特点:A、C、I、D

  • A (Atomicity) :原子性
  • C (Consistency):一致性
  • I (Isolation) :隔离性
  • D (Durability) :持久性

如何控制事务(JDBC、Mybatis)

JDBC:
Connection.setAutoCommit(false)
Connection.commit();
Connection.rollback();

Mybatis:
Mybatis自动开启事务
sqlsession(Connection).commit()
sqlsession(Connection).rollback()

结论:控制事务的底层,都是通过Connection对象完成的。

Spring控制事务的开发

Spring是通过AOP的方式进行事务开发

  • 原始对象
public class UserServiceImpl(){
	private UserDAO userDAO;
	set, get
	1. 原始对象-->原始方法-->核心功能(业务处理+核心功能调用)
	2. Dao作为Service的成员变量,通过依赖注入的方式进行赋值
}
  • 额外功能(两种方式)
// 1. MethodInterceptor
public Object invoke(MethodInvocation invocation){
	Object ret = null;
	try{
		Connection.setAutoCommit(false);
		ret = invocation.proceed()
		Connection.commit();
	}catch(Exception e){
		Connection.rollback();
	}
	return ret
}
// 2. @Aspect
   @Around
    

spring封装了 DateSourceTransactionManager,进行事务管理但是我们需要为其注入连接(注入连接池DateSource)

  • 切入点
# 给需要的类或者方法添加 @Transaction 注解

# 事务的额外功能加给哪些业务方法
# 1. 类上:类中所有的方法都会加入事务
# 2. 方法上:这个方法会加入事务
  • 组装切面
<bean id="userService" class="com.bearjun.service.UserServiceImpl">
	<property name="userDAO" ref="userDAO"/>
</bean>

<!--DataSourceTransactionManager 数据源事务管理器-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

<!-- 开启spring事务注解 -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
  • 注意细节
    进行动态代理底层实现的切换,默认false是JDK,true是Cglib。
<tx:annotation-driven transaction-manager="dataSourceTransactionManager" proxy-target-class="true"/>
0

评论区