Spring中事务用法

Spring中分为编程式事务和声明式事务,其中编程式事务最常用

 

编程式事务处理:

                定义:通过业务层中注入事务管理器对象,然后通过编码的方式进行事务控制

                缺点:

                                1.代码冗余

                                  2.不够通用

                                   3.不便于维护

声明式事务处理:

                   定义:通过利用aop切面编程进行事务控制 ,并对事务属性在配置文件中完成细粒度配置,这种方式称为声明式事务

                 好处:减少代码冗余   更加专注于业务逻辑开发,无需重复编码

                

一、编程式事务

1.之前在Mybatis框架中的事务控制:

        SqlSession 提交 :sqlsession.commit 回滚: sqlsesssion.rollback

    mybatis是对JDBC的封装 =======>connection 对象 java.sql.Connection commit() 或 rollback()

        所以说,项目中真正的负责数据库事务控制的对象:Connection对象

2.用来实现事务控制的核心对象是

        Connection 连接对象的 commit() rollback()

3.那么我们如何在项目中获取Connection对象???

        在现有项目中有DruidDataSource(连接池)   池子里都是 Connection 连接

               Connection  conn = DruidDataSource( ).getConnection();

4.

        4.1.1给现有的业务层添加事务之前我们都是这样写:

  

 这样写会导致业务层(Service)拿到的数据库连接和DAO层拿到的数据库连接不一样,导致线程不安全

4.1.2  针对上面的问题,在spring和mybatis框架中提供了一个类

 DataSourceTransactionManager  数据源事务管理类(不生产数据源,依赖于数据源,管理数据源)

作用:在全局创建一个事务管理器,用来统一调度 业务层当前线程使用的连接对象和DAO层实现连接对象一致   (类似于TheadLocal)

DataSourceTransactionManager ,这个类在创建的时候需要依赖于数据源,所有日后我们用这个类,就能保证业务层(Service)拿到的数据库连接和DAO层拿到的数据库连接一致。

所以我们将代码修改如下:

 二、声明式事务

上面这种尽管比编程式事务要方便,但是还是有冗余

 所以,Spring框架给我们提供了标签

 这里要注意,事务细粒度配置:

三、事务注解式开发

<tx:annotation-driven></tx:annotation-driven>,使用这个标签,我们可以省略了上面我们在配置文件中写的配置

使用这个标签后,我们可以@Transactional注解,来控制事务,之前在配置文件中的细粒度操作,在注解中也都可以实现。

控制事务的注解

@Transactional (一般加在业务层)

作用:用来给类中的方法加入事务控制  简化了配置文件  简化了两段配置:1.事务通知及事务细粒度配置  2.简化事务切面配置

修饰范围:类和方法上   局部优先原则

  1. 加在类上     代表类中所有方法加入事务控制
  2. 加在方法上   代表当前方法加入事务控制
  3. 类和方法上同时存在,方法优先

使用要求:如果想要让@Transactional 这个注解生效,需要在配置文件中配置” 开启注解式事务生效”

 

注解细粒度属性:

 事务传播属性:

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值