第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)

Spring事务管理

一、Spring的数据库编程

Spring框架为开发者提供了JDBC模版模式,即JDBCTemplate。他可以简化许多代码。但是在实际工作中jdbcTemplate并不常用,在工作中很多时候使用的是Hibernate和MyBatis框架进行数据库编程。

1、Spring JDBC的配置

在这里插入图片描述
在这里插入图片描述

JdbcTemplate常用方法,update和query

public int update(String sql,Object args[]):该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。

在这里插入图片描述

public List query(String sql,RowMapper rowMapper,Object args[]);:该方法可以对数据表进行查询操作。 rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

二、编程式事务管理

在代码中显式调用beginTransaction、commit、rollback等事务处理相关的方法,这就是编程式事务管理,当只有少数事务操作时,编程式事务管理才比较合适

1、基于底层API的编程式事务管理

基于底层API的编程式事务管理就是根据PlatformTransactionManager、TransactionDefinition、TransactionStatus几个核心接口,通过编程的方式来进行事务处理。

(1)给数据源配置事务管理器

在 5.1.2 节配置文件 applicationContext.xml 的基础上使用 PlatformTransactionManager 接口的实现类 org.springframework.jdbc.datasource.DataSourceTransactionManager为数据源添加事务管理器,具体代码如下:

在这里插入图片描述

(2)创建数据访问类

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、基于TransactionTemplate的编程式事务管理

doinTransaction 通过这个方法就不需要显示的调用接口来实现事务,在TransactionCallback的doinTransaction里面已经实现了

事务处理的代码散落在业务逻辑代码中,破坏了原有代码的条理性,并且每一个业务方法都包含了类似的启动事务、提交以及回滚事务的样板代码。

TransactionTemplate 的 execute方法有一个 TransactionCallback接口类型的参数,该接 口中定义了一个 doinTransaction 方法,通常以匿名内部类的方式实现 TransactionCallback 接口,并在其 doInTransaction方法中书写业务逻辑代码。在这里可以使用默认的事务提交和回滚规则,在业务代码中不需要显式调用任何事务处理的API,dolnTransaction 方法有一个 TransactionStatus 类型的参数 ,可以在方法的任何位置调用该参数 的 setRollbackOnly 方法将事务标识为回滚,以执行事务回滚。

根据默认规则,如果在执行回调方法的过程中抛出了未检 查异常 ,或者显式调用了setRollbackOnly方法,则回滚事务;如果事务执行完成或者抛出了 checked类型的异常, 则 提交事务。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

三、声明式事务管理

Spring 的声明式事务 管理是通过 AOP 技术实现的 事务管理,其本质是 对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方 法之后根据执行情况提交或者回滚事务。

声明式事务管理最大的优点是不需要通过编程的方式管理事务,因而不需要在业务逻 辑代码中掺杂事务处理的代码,只需相关的事务规则声明便可以将事务规则应用到业务逻 辑中。通常情况下,在开发中使用声明式事务处理不仅因为其简单,更主要的是因为这样 使得纯业务代码不被污染,极大地方便了后期的代码维护。

与编程式事务管理相比,声明式事务管理唯一不足的地方是最细粒度只能作用到方法 级别,无法做到像编程式事务管理那样可以作用到代码块级别。但即便有这样的需求,也 可以通过变通的方法进行解决,例如可以将需要进行事务处理的代码块独立为方法等。

Spring 的声明式事务管理可以通过两种方式来实现,一是基于 XML 的方式, 二是基 于@Transactional 注解的方式 。

1、基于XML方式的声明式事务管理

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、基于@Transactional注解的声明式事务管理

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

发布了105 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38367817/article/details/105609786