00:02
我们继续去搭建这个项目的环境。那现在呢?我们要做的事是这个生梦之事务。嗯。什么是事物?首先呢,我们也还是去明确一下目标。目标思路代码,目标思路代码啊,咱们都这么干啊,我我我看看这个天天这么念叨,你会不会把这几个词听到心里面去啊。哎,到最后人家问你说你众筹阶段你学啥了,哎。目标思路代码,目标思路代码啊,你就跟他说这个就行了。生命是事。那不管是声明式的还是编程式的,归根,归根到底那就是还是事物。所以说而事物呢,其实框架的声明式事物底层呢,还是靠编程式事物来做的。
01:06
那么其实这个底层的编程式事物啊,我们可以用这个TRYK是finally的这样一个结构,哎,我们来看看他大概是干了哪些事情,Finally。呃,在这个揣块里边是我们要做的核心操作。核心操作。习惯要保存。所以给他先。放到桌面。核心操作呢,就好比说我们在service里边,假设是admin service。我们要做一个操作,Save我的命。把这个串进来啊。那。在这个前面,在这个核心操作的前面。哎,我打算要去在这个方法里边要调do的方法,要去操作数据库了。那么在这个东西的前面这儿应该干什么?
02:04
啊,Very good。开启15。非常棒,假设我现在如果有数据库连接这个connection对象还大家还记不记得调哪个方法看书?啊,非常棒啊,Set auto commit auto什么意思?哎,自动的commit什么意思?提交设置自动提交为false。也就是说在这儿,其实这个操作呢,你可以叫开启事务,也可以叫关闭自动提交。诶。嗯,为什么要关闭自动提交呢?嗯,因为啊,你想我们。哎,想做好几个数据库操作,是希望他们几个放在一个事物里边。如果拿咱们书城项目的这个操作来举例子的话,就是我们结账的时候要减库存,要加销量,要去这个保存订单,保存订单详情,对吧,甚至于说你可能这功能还要去减这个用户账户里边的余额,这些操作都是要去操作数据库,而他们整个都算在结账这一个。
03:17
大的操作里边。我们希望他们要成功,就。哎,都成功,要失败就。有一个失败,中间有一个失败。全部都放弃。啊,这个事物这儿他们是非常的,呃,忠贞讲义气的是吧,有句话叫做不求同年同月同日生。但愿同年同月同日死啊,哎,就是这样的。所以说呢,我们那如果说自动提交不关闭的话,不关闭自动提交,那么。就是那就是默认就是自动提交的,那么他执行一个就会提交一个,执行一个就会提交一个,你下次这个失败了,你想把这些已经提交的回滚,这个就做不到了。
04:04
为什么说提交的为什么做不到,这个是有根据的,我们事物呢,有这个acid这四个属性。哎,其中呢,有一个叫持久性。意思就是说我们数据一旦保存到数据库里边。就再也不能够把它给撤销了,就是它就会持久的保存到数据库里边,你INSERT1条数据一旦提交以后啊,它就不能够被撤销了,除非你下次delete那是另外一个事儿了啊。所以说呢,不能让他自己自动提交,而是说我们改成手动提交,我们要什么时候提交,再什么时候提交。那么在这儿核心操作的后面啊,就是说我们这个这一行完了,这还在揣块里边在这儿。如果如果这个行代码执行完,能够到这儿,说明他没有抛一场,因为抛一场就进cash了,诶那么在这儿应该做的事情是。
05:04
哎,在这就应该提交15了。哎,还是我们connection点。提交时。那备不住会跑一场。如果泡一长的话,我们就。哎,回滚事务。不错啊,大家这个事物这挺难的,你们还学的都不错哈。对,所以说我听说咱们班是上硅谷有史以来最优秀的一个班。嗯。Go back。不是这么写吗?啊,对对对,Roll back。我写成back了是吧。回滚回滚,这个15号,那final里边干嘛。这个这不叫关流哈,这叫关这个连接啊,哎,释放数据库连接。
06:06
呃,也可以叫做放回数据库连接池。如果我们用连接池的话,就其实不是把这个流这个不是不是不是把这个连接的对象释放啊,不是把它对象干掉,而是把它标记为空闲啊,我们这儿呢,按说你应该先判断是不是为now,然后再close,我们这儿只是举个例子哈,咱们就简单写了。哎,说起来这个的话,咱们稍微这个岔开一点点哈。这个结构呢,跟我们A是其实是有很大关系的,那么如果对应A的通知的话。你看这是核心操作,核心操作前面这个对应我们A的哪个通知。非常棒,前置同志。哎,这个是哪个通知。你看你看你看。
07:00
这么多人说后置通知。哎。这个叫返回通知。返回通知啊,你这个就是我们人会有一种思维的惯性,它前面叫前置,它后边就叫后置嘛,是吧,但其实不对。对,就这个东西能够执行到这儿,说明前面这个方法呢,成功返回了。所以这儿呢,对应我们up是返回通知。开始里边这个是啥呀。哎,这个很很没有意义,就是异常通知finally里边这个是。哎,这个是后置通知他们整个这个可以用一个。环绕通知,哎,环绕通知。嗯,其实这个返回异常后置哈,这这三个呢,我教大家一个办法去去记哈,说这个一个人哈,说寿终正寝。对应哪个通知。
08:01
寿终正寝。安详的离去了。是不是?返回通知。啊,如果这个人死于非命。哎,是抛一场。抛异常,他没想到会有那么一天是出出出意外了啊抛异常了,这个异常没有虚拟机没有抓住,抛到外边了是吧,把系统搞崩溃了。然后呢?不管你是寿终正寝还是死于非命,最后都开追悼会。对吧,就是你看你不管,你要是操作成功的话走返回,操作失败的话就走异常,这两个肯定只走一个,这两个肯定只走一个。但是呢,这个人去了,肯定我们都得要。开追悼会。啊,这个。呃,红白喜事是吧,嗯,然后这个。哎,人生该告别的,告别是吧,这个后置通知。
09:01
啊,所以说这几个哈,是都属于这个料理后事的,你看这三个都是料理后事的啊,前置呢,这个就是说在你核心操作之前先做一些个事情啊,这个就是说呃。奈何桥孟婆汤啊,让你忘记前世的种种,然后呢,今生经历一系列的精彩到最后是吧?这一辈子啊,这人这一辈子就在踹开斗里边。好吧,哎,所以这个就是我们事物呢,我们要做的事儿。这个呢,你可以认为,如果是我们编程式事务,我们就是要做这个。哎,那么我们。到框架的环境下边,我们做声明式的事物了。那框架环境下边做生存式事物啊,我们这个目标是啥呢?哎,在框架的环境下,哎,通过我们一系列的这个配置。
10:00
嗯,我们spring。哎,由来管理我们事物操作。哎,这个事物操作呢,都是这些通用的,就是说你具体操作是千变万化的,但是操作之前都是开事务,操作之后都是提交事务异常都回滚完了,最后都释放一下这些,其实你啥操作都是这么干。那就框架就可以把它们抽取出来了,哎,基于A的思想把它给抽取出来了,所以这个呢,其实我们可以把它看成是通用的事务操作。由来管理,那么我们在写代码呢,就享受框架提供的这个服务,我们就啥也不干了啊。然后让我们写的代码能够享受啊这个框架提供的服务。哎,就好比说你去一个澡堂子是吧,哎,你进去以后有人帮你,有人帮你拿这个外套是吧,有人帮你去这个去干啥啥是吧,有人帮你搓背是吧,哎,这个就澡堂就是一个框架啊。
11:11
哎,澡堂就是一个框架,然后你去你就享受这个服务就好了,对吧。哎,所以说我们的目标呢,就是把这一套都交给spring来做啊,所以下一步看看这个这个事儿呢如何去实现。
我来说两句