什么是事务
事务:保证业务操作完整性的一种数据库机制。
事务的四个特点: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"/>
评论区