事务的相关概念
1.什么是事务
2.事物的特性
3.不考虑隔离性产生读的问题
4.解决读的问题
(1)设置隔离级别
spring事务管理api
1.spring事务管理的两种方式
第一种 编程式 (不再使用)
第二种 声明式
(1)基于xml配置文件实现
(2)基于注解
接口 PlatfromTransactionManager 事务管理器
spring 针对不同的dao层框架,提供接口不同的实现类
首先配置事务管理器
OrdersService
OrdersDao
声明事务管理器(xml)
xml中
创建dao和service的对象,并在service中注入dao
创建jdbc模板对象,并在dao中注入
在模板中注入dataSource
1. 配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref="datasource"></property>
</bean>
2.配置事务的增强
<tx:advice id="txadvice" transaction-manager="transactionManager">
做事务操作
<tx:attributes>
制定事务方法的匹配规则
<tx:method name="account*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
3.配置切面
<aop:config>
切入点
<aop:pointcut expression="execution(* 类的名称)" id="pointcut1"/>
切面
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
public class OrdersService{
public OrdersDao ordersDao;
创建set方法
public void accountMoney(){
ordersDao.lessMoney();
ordersDao.moreMoney();
}
}
public class OrdersDao{
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate=jdbcTemplate;
}
public void lessMoney(){
String sql="update shiwu set salary=salary-? where username=?";
jdbcTemplate.update(sql,1000,"小王");
}
public void moreMoney(){
String sql="update shiwu set salary=salary+? where username=?";
jdbcTemplate.update(sql,1000,"小马")
}
}
声明事务管理器(注解)
配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref="datasource"></property>
</bean>
开启事务的注解
<tx:annotation-driven transaction-manager="transactionManager"/>
在要使用事务的方法所在类上面添加注解
@Transactional