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

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

开发者学堂课程【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 ,声明式事务管理在配器上的成本极大地降低了。

相关文章
|
SQL 缓存 监控
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
|
人工智能 定位技术
如何将国家地图服务系统的EPS地图转为shp图层
如何将国家地图服务系统的EPS地图转为shp图层
3891 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 脚本入门
|
前端开发 数据可视化
React中使用Echarts实现数据可视化的小案例(基础文章)
React中使用Echarts实现数据可视化的小案例(基础文章)
1011 0
React中使用Echarts实现数据可视化的小案例(基础文章)
|
C语言 C++ 编译器
Dev C++多文件编译问题
当需要在主程序中使用以声明的类则是在main()前插入使用类的声明的文件即可 这样做的条件是你把类的.cpp文件编译成库, 然后编译main()文件时把库连接进去。
1396 0
|
1天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
950 150
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话