当前位置: > 财经>正文

@transactional注解原理 外汇保险机制原理图解图片高清

2023-07-21 05:39:14 互联网 未知 财经

@transactional注解原理

数据库事务的“抓手”

数据库的事务功能已经由数据库自身实现,它留给用户的就是三个指令:开启事务、提交事务和回滚事务。

开启事务一般是start transaction或begin transaction。提交事务通常都是commit。回滚事务通常都是rollback。

数据库通常都有自动开启事务和自动提交事务的开关,打开后,事务就会自动的开启和提交或回滚。这样用户就无感知了。

JDBC的事务“抓手”

JDBC实现了访问数据库的协议,可以认为是对一些指令的封装,当然也包括这些事务指令。它们都被做到了java.sql.Connection这个接口里。

它代表到数据库的一个连接,当这个连接建立好后,默认事务就已经打开了,而且默认情况下执行完一个SQL语句后事务也是自动提交的。

可以通过下面这个API进行检测:

boolean getAutoCommit();

通常情况下,我们都不希望事务是一句一提交,而是要执行若干个SQL语句后一次性提交,此时我们就需要改变这种自动提交的行为。

可以通过下面这个API进行设置:

void setAutoCommit(boolean autoCommit);

当我们禁用掉自动提交之后,一定要记得自己手动提交事务,否则结果可想而知。当然,需要回滚的时候也要记得手动回滚。

可以通过下面这个API提交事务:

void commit();

可以通过下面这个API回滚事务:

void rollback();

这样我们就可以在Java代码级别来控制事务的行为了。同时我们也应该认识到,在Java代码级别事务是和Connecton的实例对象绑在一起的。

换句话说,只有在同一个Connection对象上执行的SQL语句才会在同一个事务里。在不同的Connection对象上执行的SQL语句永远不会在同一个事务里。

更精确地说,后者构成的是分布式事务,前者通常称为本地事务。当然,分布式事务有属于自己的解决方案,只是不能再使用本地事务了。

备注:以上这些其实都是基本常识,只是现在的ORM框架太牛了,导致很多年轻的码农都没机会再接触这些了。

Spring的事务“抓手”

Spring通过使用@Transactional注解实现了

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。