Spring 事务管理的详细讲解及使用


一、 Spring 事务管理简介

在 Spring 框架中事务管理有两种方式:一种是传统的编程式事务管理,即通过编写代码实现的事务管理;另一种是基于 AOP 技术实现的声明式事务管理。由于在 Spring 框架中,编程式事务管理很少使用,所以我们只对 Spring 的声明式事务管理进行详细讲解。
Spring 的声明式事务管理在底层采用了 AOP 技术,其最大的优点在于无须通过编程的方式管理事务,只需要在配置文件中进行相关的规则声明,就可以将事务规则应用到业务逻辑中。

Spring 实现声明式事务管理主要有两种方式:

  • 基于 XML 文件方式的声明式事务管理。
  • 通过 Annotation 注解方式的事务管理。

二、Spring 事务管理器

在 Spring 框架中提供了多种事务管理器来进行事务管理。Spring 的事务管理器是基于AOP 实现的。在 Spring 的事务管理器中包含了配置事务传播行为、隔离级别、只读和超时属性,这些属性提供了事务应用的方法和描述策略。
在 Java EE 项目开发经常会使用分层模式,Spring 的事务处理位于业务逻辑层,它提供了针对事务的解决方案。

1、Spring 事务管理接口

在 Spring 的事务模块(spring-tx-5.2.7.RELEASE.jar)中包括事务管理的三个核心接口。

1.1、 PlatformTransactionManager 接口

PlatformTransactionManager 接口是 Spring 提供的事务管理器接口,用于管理事务。Spring 将事务的配置详细信息封装到 TransactionDefinition 对象中,然后通过事务管理器的getTransaction() 方法获得事务的状态(TransactionStatus),并对事务进行下一步的操作。
该接口中提供了三个事务操作方法,具体如下:
在这里插入图片描述

1.2、 TransactionDefinition 接口

TransactionDefinition 接口是事务定义(描述)的对象,它提供了事务相关信息获取的方法,其中包括五个操作,具体如下:
在这里插入图片描述

1.3、 TransactionStatus 接口

TransactionStatus 接口是事务的状态,它描述了某一时间点上事务的状态信息。其中包括六个操作,具体如下:
在这里插入图片描述

2、Spring 中包含的事务管理器

在这里插入图片描述

三、 事务的传播行为

事务传播行为是指:多个含有事务的方法相互调用时,事务如何在这些方法间传播。
在这里插入图片描述

四、 Spring 声明式事务管理

Spring 声明式事务管理实现方式:

  • 基于 XML 文件方式实现声明式事务管理。
  • 通过 Annotation 注解方式实现声明式事务管理。

1、Jar 包依赖

Spring 核心容器模块:
spring-beans-5.2.7.RELEASE.jar
spring-context-5.2.7.RELEASE.jar
spring-core-5.2.7.RELEASE.jar
spring-expression-5.2.7.RELEASE.jar

Spring JDBC 模块:
spring-jdbc-5.2.7.RELEASE.jar

Spring 事务模块:
spring-tx-5.2.7.RELEASE.jar

Spring AOP 模块:
spring-aop-5.2.7.RELEASE.jar

AspectJ 框架:
aspectjweaver-1.9.5.jar

Spring 整合 AspectJ 框架模块:
spring-aspects-5.2.7.RELEASE.jar

Commons-Loggin 日志:
commons-logging-1.2.jar

数据库驱动:
mysql-connector-java-5.1.48.jar

2、使用 XML 文件方式实现声明式事务管理

2.1、 搭建环境

创建项目

在这里插入图片描述

创建实体类
public class Users {
   
    private int userid;
    private String username;
    private String usersex;

    public int getUserid() {
   
        return userid;
    }

    public void setUserid(int userid) {
   
        this.userid = userid;
    }

    public String getUsername() {
   
        return username;
    }

    public void setUsername(String username) {
   
        this.username = username;
    }

    public String getUsersex() {
   
        return usersex;
    }

    public void setUsersex(String usersex) {
   
        this.usersex = usersex;
    }

    @Override
    public String toString() {
   
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", usersex='" + usersex + '\'' +
                '}';
    }
}

public class Orders {
   
    private int orderid;
    private double orderprice;

    public int getOrderid() {
   
        return orderid;
    }

    public void setOrderid(int orderid) {
   
        this.orderid = orderid;
    }

    public double getOrderprice() {
   
        
  • 6
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值