SSM-事务

java中的事务和数据库中的事务功能相同,都是多条sql语句形成整体,要么一致成功要么一致失败。

例如:银行余额增删要么同时成功要么同时失败

commit 提交事物 --成功

rollback回滚事物 --失败

java中事务分为两种,一种是编程式,一种是声明式,但常用声明式

1、导入依赖

事务
<dependency>
      <groupId>org.springframeword</groupId>
      <artifactId>srping-tx</artifactId>
      <version>5.0.5RELEASE</version>
    </dependency>

mysql
 <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.31</version>
      </dependency>
jdbc框架
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
连接池
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

2、连接池技术

<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
导入property文件

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${user_name}"></property>
<property name="password" value="${password}"></property>
<property name="maxActive" value="${maxActive}"></property>
</bean>




<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
</bean>

 <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"></property>
</bean>

以下是编程式事务使用

加事务

@Repository
public class UserDao {

    @Autowired
    JdbcTemplate jdbcTemplate;

	@Autowired
    PlatformTransactionManager transactionManager;
    
    public void sel(){
        
        //开启事务
        DefaultTransactionDefinition definition=new DefaultTransactionDefinition();
        TransactionStatus status=transactionManager.getTransaction(definition);
        try{
            jdbcTemplate.update("update account set money=monet-500 where id=1");
            
              jdbcTemplate.update("update account set money=monet+500 where id=2")
                  
              //提交事务
              transactionManager.commit(status);    
            
        }catch(Exception e){
            //回滚事务
            transactionManager.rollback(status);
        }
        
        
    }
	

}

声明式

利用aop实现事务的控制

1、在xml文件中指定好谁是增强类

<tx:advice id="interceptor" transaction-manager="transactionManager">	<!--指定事务管理器  -->
    <tx:attributes>
        <tx:method name="*"> <!-- 增强方法是谁 -->
        </tx:method>
    </tx:attributes>
</tx:advice>

2、织入

<aop:config>
    <aop:advisor advice-ref="interceptor" pointcut="execution(void com.NEPU.tx.User.sel())"></aop:advisor>		<!--前置,后置,异常增强全加上了 -->
</aop:config>

3、运行

@Repository
public class UserDao {

    @Autowired
    JdbcTemplate jdbcTemplate;
    
    public void sel(){
            jdbcTemplate.update("update account set money=monet-500 where id=1");
            
            jdbcTemplate.update("update account set money=monet+500 where id=2");
    }
}

这样就能开启

底层aop会自动在方法中加入前置,后置,异常增强;

  • 27
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值