声明式事务讲解| 学习笔记

简介: 快速学习声明式事务讲解

开发者学堂课程【Java Web 开发系列课程:Spring 框架入门声明式事务讲解

 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/538/detail/7351


声明式事务讲解

 

内容简介:

一、接口  Connection

二、配置  sqlSessionFactory

三、事务的传播特性

四、使用 TransactionTemplate

五、选择原则

 

一、接口 Connection

所有超级接口:

public intertnos Connection extends Wrapper

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

Connection 对象的数据库能够担供述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getheMetaData 方法获得的。

注:在配置 Connection 时, JDBC 应用程序应该使用适当的 Connection 方法,比如 setAutoCommit 或 setTransactionIsolation 。在有可用的  JDBC 方法时,用程序不能直接调用 SQL 命令更改连接的配置。默认情况下, Connection 对象处于自动提交模式下,这意味着它在执行每个语句后都会自动提交更改。

如果禁用了自动提交模式,那么要提交更改就必须显式调用 commit 方法;否则无法保存数据库更改。

使用 JDBC21 核心 API 创建的新 Connection 对象有一个与之关联的最初为空的类型映射。用户可以为此类型映射中的 UDT 输入一个自定义映射关系。在使用 ResultSet.getObject 方法从数据源中获取 UDT 时, getObject 方法将检查该连接的类型映射是否有对应该 UDT 的条目。

如果有,那么 getObject 方法将该 UDT 映射到所指示的类。如果没有条目,则使用标准映射关系映射该 UDT 。

用户可以创建一个新的类型映射,该映射是一个 java.util.Map 对象,可在其中创建一个条目,并将该条目传递给可以执行自定义映射关系的 java.sql 方法。

在这种情况下,该方法将使用给定的类型映射,而不是与连接关联的映射。

例如,以下代码片段指定  SQL 类型 ATHLETES 将被映射到 Tava 编程语言中的 Athletes 类。该代码片段为 Connection  对象 con 获取类型映射,并在其中插入条目,然后使用新的条目将该类型映射设置为连接的类型映射。

 

二、配置 sqlSessionFactory

class="org.mybatis.spring.SqlSessionfactoryBean">

value="classpath.mybatis.cfg.xml"/>

class="org.mybatis.spring.SqlSessionTemplate">


三、事务的传播特性

I.PROPAGATIONREQUIRED :如果存在一个事务,则支持当前事务。如果没有事务则开启。

2.PROPAGATIONSUPPORTS :如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。

3.PROPAGATION MANDATORY :如果已经存在一个事务。支持当前事务。如果没有一个活动的事务,则括出异常。

4.PROPAGATION REQUIIRESNEW :总是开启一个新的事务。如果一个事劳已经存在,则将这个存在的事务持起。

5.PROPAGATION NOT SUPPORTED :总是非事务地执行,并挂起任何存在的事务。

6.PROPAGATIONNEVER:总是非事劳地执行,如果存在一个活动事务,那抛出导常。

7,PROPAGATION NESTED:如果一个活动的事务存在。则运行在一个嵌套的事务中,如果没有活动事务,则按 TransactionDefinition.PROPAGATION REQUIRED 属性执行。

 

四、使用 TransactionTemplate

TranaaetionTeplate 采用与 Spring 中别的模同样的方法,如 TdheTemplate 。它使用调机制,将应用代码从样板式的造源获取和舞能代码中解放出来,这样写出的代码座目的驱动的,把精力集中在开发者想要做的事情上。

注意:

效像你马上要在后面的例子中看到的那样使用 TramenctionTenplate 绝对会增加你的代码与 Spring 的事务框架和API间的耦合。到底编程式事务管理是不是适合你的项目需要由你自己来决定。

应用的代码必须在一个事务性的上下文中执行,这样就会像这样一样显式的使用 TramactionTenplate 你作为一个应用程序员,会写一个 TransactionCallback 的实现,通常会用名类来实现)这样的实现会包含所以你需要在该事劳上下文中执行的代码。然后你会把一个你自己实现 TransactioeCallback 的实例传运给TransnctionTemplate暴露的excoutel.) 方法。

publie class SimpleService implements Service{

single TransactionTemplate shared anongst all methods in this instance private finnl TransactionTemplate transactionTemplate

use constructor injectian to supply the PlatformTransactionManager

public SimpleService(PlatformTransactionManager

transactionMenager)

Assert.notNull(transactionManager,"The'transactionManager’ argunent mst not be null.")

this.transactionTemplate=new TransactionTemplate(transactionManager);

publie Object someServiceMethod)){

return transactionTemplate.execute(new Transaction

The code in this method executes in e transactional context. public Object doInTransaction(TransactionStatus status)( updateOperation1()

return resultOfUpdateOperation2();

}

}

}

}

 

五、选择原则

选择编程式事务管理还是声明式事务管理

当你只有很少的事务操作时,编程式事务管理通常比较合适。例如,如果你有一个 Web 用,其中只有特定的更新操作有事务要求,你可能不用使用 Spring 或其他技术设置事务代理。这种情况下,使用 TransaotionTemplate 可能是个好办法。只有编程式事务管理才能显式的设置事务名称。

另一方面,如果你的应用中存在大量事务操作。那么声明式事务管理通常是值得的。它将事务管理与业务逻辑分离,而且在 Spring 中配置也不难。使用 Spring ,而不是 EBCMT ,声明式事务管理在配器上的成本极大地降低了。

相关文章
|
存储 前端开发 数据库
MVC模式和三层架构
MVC模式和三层架构
|
存储 JavaScript Serverless
函数计算产品使用问题之如何实现项目自动化部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
160 0
|
数据采集 算法 数据处理
Python中的并发编程:异步IO与多线程对比分析
传统的多线程编程在Python中因为全局解释器锁(GIL)的存在受到限制,导致多线程并不能充分利用多核处理器的优势。本文将探讨Python中的异步IO编程与多线程编程的差异与优劣,并分析适合的应用场景。
|
SQL 缓存 监控
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
|
SQL 数据挖掘 数据库
SQL数据分析实战:从导入到高级查询的完整指南
SQL数据分析实战:从导入到高级查询的完整指南
336 0
|
人工智能 定位技术
如何将国家地图服务系统的EPS地图转为shp图层
如何将国家地图服务系统的EPS地图转为shp图层
3343 0
|
Ubuntu Shell Linux
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
|
存储 弹性计算 数据管理
构建稳健数据管理与备份策略:ECS数据持久化与备份实践
本文深入探讨了云服务器ECS的数据管理与备份策略,聚焦于数据持久化存储、数据库与ECS的协同,以及实施有效的数据备份策略和利用快照进行数据恢复。通过实际代码示例,读者能够全面了解如何在云计算环境中保障数据的安全性、可用性和可恢复性。
496 0
|
数据采集 搜索推荐 算法
【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)
项目地址:Datamining_project: 数据挖掘实战项目代码
5645 1
|
监控 数据可视化 前端开发
火焰图是怎么画出来的?Pyroscope源码解析之火焰图
火焰图简述火焰图(Flame Graph) 由Brendan Gregg在2011年创造,是一种可视化程序性能分析工具,它可以帮助开发人员追踪程序的函数调用以及调用所占用的时间,并且展示出这些信息。一般性解释火焰图的基本思想是将程序的函数调用栈转化为一个矩形的 “火焰” 形图像,每个矩形的宽度表示该函数所占用的比例,高度表示函数的调用深度(也就是递归调用的层数)。通过比较不同时间点的火焰图,可以快
1032 0