其他分享
首页 > 其他分享> > spring事务

spring事务

作者:互联网

事务

什么是事务

事务:事务是逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全都失败。

事务的特性

如果不考虑隔离性引发的安全性问题

解决读问题

可以通过设置事务的隔离级别来解决读的问题

spring事务管理的主要api

PlatformTransactionManager:平台事务管理器

平台事务管理器,这是一个接口,是spring用于管理事务的真正的对象

TransactionDefinition:事务定义信息

事务定义,用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读

TransactionStatus:事务的状态

事务状态,用于记录在事务管理过程中,事务的状态的对象

事务管理的api的关系

spring在进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,

在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。

spring的事务的传播行为

什么是事务的传播行为

我们知道事务是建立在service层的,一个service里面可能调用多个dao层的方法,但是也有可能一个service去调用另外一个service里面的方法,当一个service去调用另外一个service的时候就是事务之间的关系就叫做事务的传播行为,因为每一个service里面可能都有自己的事务。

spring中提供了七种事务的传播行为

这七种事务的传播行为主要是有三类,下面讲解的时候假设有两个service,这两个service中各有一个方法,分别是AB。并且在B方法中调用了A方法。

保证多个操作在同一个事务中

保证多个操作不在同一个事务中

嵌套式事务

spring的事务管理

下面的案例是转账案例

service的实现类

public class AccountServiceImpl implements AccountService{
    //注入DAO
    private AccountDao accountDao;
    public void setAccountDao(AccountDao accountDao){
        this.accountDao = accountDao;
    }
    
    /**
    * from 转出账号
    * to 转入账号
    * money 转账金额
    */
    public void transfer(String from, String to, Double money){
        accountDao.outMonty(from, money);
        accountDao.inMoney(to, money);
    }
}

dao的实现类

public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao{
    public void outMoney(String from, Double money){
        this.getJdbcTemplate().update("update account set money = money - ? where name = ?", money, from);
    }
    
    public void inMoney(String to, Double money){
        this.getJdbcTemplate().update("update account set money = money + ? where name = ?", money, to);
    }
}

配置service和dao交给spring管理

<bean id="accountService" class="xxxxxxxxx.AccountServiceImpl"></bean>
<bean id="accountDao" class="xxxxxx.AccountDaoImpl"></bean>

配置连接池和JDBC的模板

<!--配置连接池和JDBC的模板-->
<!--第二种方式通过context标签引入的-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置C3Pe连接池-->
<bean id="dataSource"class="com.mchange.v2.c3pe.ComboPooledDatasource">
    <property name="driverClass"value="${jdbc.driverclass}"/>
    <property name="jdbcUrl"value="s{jdbc.url}"/>
    <property name="user"value="${jdbc.username}"/>
    <property name="password"value="${jdbc.password}"/>
</bean>

在上面的dao实现类中看到了继承了JdbcDaoSupport这个类,这样我们就可以不用在dao从创建jdbc模板了,因为这个类中已经有了,只有dao继承了这个类然后在配置文件中直接注入这个属性即可。

<!--配置DAO-->
<bean id="accountDao"class="com.itheima.tx.demo1.AccountDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>

第一种spring的事务管理方式,编程式

所谓的编程式事务也就是需要自己去手动编写代码

第二种spring事务管理,声明式事务(通过配置实现)

首先需要引入aop的开发环境的包,因为这种方式本质上时通过aop来实现的。

第二种spring事务管理,声明式事务(通过注解实现)

同样的需要使用aop开发环境的jar包

标签:事务管理,事务,accountDao,service,spring,money
来源: https://blog.csdn.net/weixin_44600908/article/details/96366006