第五章、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将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。

第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第1张图片在这里插入图片描述

二、编程式事务管理

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

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

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

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

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

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

(2)创建数据访问类

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

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

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

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

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

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

第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第4张图片第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第5张图片
在这里插入图片描述

三、声明式事务管理

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

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

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

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

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

第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第6张图片
第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第7张图片第五章、Spring的事物管理(JdbcTemplate、编程式事务管理、基于TransactionTemplate的编程式事务管理)_第8张图片

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

你可能感兴趣的:(Java,EE框架整合开发入门到实战)