00:00
来,我们继续往后说啊,来下个话题呢,我们就来说一下破里面啊,非常优秀的一个声明式事务管理啊,啊,其实这个后面呢,我们加上啊管理两个字啊更合适一点啊,声明式事务管理OK,呃,那在讲这个support生命式事务管理之前呢,我们先来把大家之前学过的这个事物啊,相关的一些概念呢,再来简单的回顾回顾啊,还都记得吗?啊,什么时候讲的呀,讲这ABBC的时候讲的是吧?OK,好,来吧,那我们就来简单的讲一下啊呃,首先这个事物是什么,大家记知不知道事物是什么呀?获者这个事物的作用是什么呀?保持数据一致性啊,保持为了保证数据的什么完整性和这个一致性对不对?OK啊,那怎么去理解这个事物呢?或者说这个事物最根本的一个原则是什么呀?啊,这里面都有是吧?啊,要么都执行,要么都不执行啊其实呃,这个还不是很精确啊,就是要么同时成功,要么同时失败,大家想想是不是对吧?这个执行与不执行的话,其实呃不是很精确,因为他有些确实会执行,只不过他最后会回滚。
01:26
对吧,那我们就进行什么呀,要么同时成功,要么就同时失败,这是我们是我最根本的一个原则啊,这个它是不能变的,然后另外一个就是我们刚刚说到的事物呢,它就是来为了保证我们数据的完整性和一致性的,明白这个意思吧,啊,完整性和一致性好吧,那这个的话简单给大家举一个例子啊,应该这个大家当初讲的时候也举过这个例子啊,就是我们比较典型的一个,呃,转账这个例子啊,比如说你看啊,有这样的一个需求,呃,就是A用户呢与这个B用户啊,就是这是我们的A用户,然后这是我们的B用户,明白吧,比如说A呢,总共有5000块钱啊,B呢,没有钱是吧,现在有一个需求就是什么呀,A要给B转上2000块钱,能明白这个意思吗?OK,那么其实转账的这个过程的话呢,我们应该分成这么两步来做,第一步呢,就是把A里面呢扣上2000块钱,第二步呢,把B里面呢去加上2000块钱,对吧,这两步操作。
02:27
做你必须得同时成功,那么代表着我这个转账业务它才是什么成功的,能理解吧,OK,好,那怎么去理解这个完整性和这个一致性呢?大家注意,在转账之前,他们两个的数据加起来就是5000块钱,那么等你转完以后,比如说我转成功了,它变成了3000,它变成了2000是吧?但是呢,他们两个加起来这个数据是不是还是5000块钱了,对不对啊,这就是我们的完整性和这个一致性,那么只要其中有一个操作出问题了,那么其实你这个转账操作就应该都得失败,要不它就会出现一些问题了。
03:05
能理解了吧?啊,这就是我们的一个事物啊啊呃,那么提到事物,我们就不得不提到它四个关键的属性,叫做什么?A cid,还记不记得记得吧?啊,这个肯定是讲过的啊,原子性,一致性,隔离性以及我们的持久性啊,那么今天我们主要呢,不是来去讲这个事的啊,我们讲事物管理,所以说这个东西呢,我就不再带着你去看了,大家下去以后如果忘了的同学你可以啊,再把这个呢好好的去啊看一看,再把它理解理解啊这四个属性呢,还是相对来讲比较重要的。听懂了吧?OK,这就是我们的一个事物啊,它简单的一个介绍啊,呃,那么我们今天要讲的呢,是这个point的一个事务管理啊,而且是一个声明式的事务管理啊,那么还是啊,在说它之前,我们先来想想,我们原来使用JBBC进行事务管理的时候,我们需要怎么去编码,大家还记不记得,首先第一步你必须得取消自动提交吧,Set一个什么all to commit,等于啊,For OK,好,然后呢,接下来的话呢,就是做你具体的操作,那么假如说你这个操作是正确的,那我就做一个commit提交操作,假如说这个操作是失败的,那我就做一个若回滚操作,那么大家想一想,在我的每一个真删改方法中,我是不是都得去写类似的代码,对不对,OK,都得这么去做啊,那么这个其实也就是我们。
04:40
之前写的这个事务管理中,它存在一些不足的地方,就是我们必须要在不同的方法中去写出一些相同的代码来,而且呢,以前我们的事务管理它叫做编程式的事务管理,就是我们通过具体的Java代码在我们的程序中去写我们的事务管理,这个也是不是很好的一个地方,明白了吧,那么今天我们要讲的呢,是一个声明式的一个事务管理,啥叫做声明式的事务管理呢?就是我们看不到任何事务管理的代码,而全部通过一个配置的形式来去解决,这样的话有什么好处呢?大家来想啊,还是本来这就是我的一个核心的业务方法啊,核心的这个业务方法,那么如果说你想去管理你的事务,那么你可能在业务中呢,就要去把我们的事务代码给他写出来,其实这个跟我们那个日志的那个是一样的道理,这样的话呢,第一个事务管理呢,给他。
05:40
分散到了不同的方法中。另外一个对于我原本的核心业务方法来讲,除了要关心业务之外,我还得关心事物怎么去做。所以说呢,它还是有一些什么呀,代码冗余,代码分散,代码混乱这样的一些问题,这个是能理解的吧,诶还是有这些问题的好,那么采用的这个声明式事务管理以后,它有什么好处呢?就是我们可以把我们事务管理的代码呢,给它提取出来,提取出来以后呢,我们也可以把它当成一个切面,能明白吧,然后对于我这个核心的业务来讲的话,它里面只剩了业务,然后呢,我再以AOPP的方式呢,把我的这个事务界面给它作用到具体的方法上,能明白了吗?所以说呢,声明式的事务管理,那么底层还是使用到我们的a op,那么具体的一些好处的话呢,就是我们在讲a op的时候,给大家去说的那些问题啊,说的这些好处。
06:36
这个大家是能理解的吧,现在OK啊,那么像这些文字性的东西呢,我们就不必要啊再去挨个去看了,但是呢,这里面有一个东西需要大家知道啊,就是这个地方,那么support他是怎么来去完成这个声明是事务管理的呢?或者说他的这个事务管理是怎么做的呢?大家注意他在不同的事物管理API之上也定义了一个抽象程,通过配置的方式让它去生效,然后呢,我们这样做的好处是什么呢?就是开发人员不必要了解事务管理API的一个什么底层细节性的一些东西,然后呢,你就可以使用我们的事务管理机制啊,啥意思呢?这个设计思想呢,大家也要知道啊,这是我们原本的这个JDBC啊,它这个API里面的那个事务管理这一类代码,那么破呢,在这个基础之上重新封装了一个什么抽象层。
07:30
了解吧,然后呢,呃,通过这个抽象层呢,对你的这个原本的事务管理做一个封装,那么我们再去使用的时候,我只需要去使用support提供好了这个东西就行了,而不必要去了解它底层的一些东西了,明白吧,但是啊,注意这个地方它说的是一个抽象层,那么这个抽象层呢,我们是不能直接去用的,所以说我们得用一个什么呀,具体的一个事物管理器。能听懂这个意思吧,哎,具体的一个事务管理器,好,那么它的这个事务管理的这个抽象层呢,就是我们的platform乘manager,就是这样的一个接口,而point为不同的事务技术啊,就是这个事务管理技术啊,提供了不同的13类,那我们可以来看一下主要的13类呢,有这么几个啊,第一个data source trans such manager,它是来去管理你这个JDBC程取,然后呢,GTA的,那么这个东西的话,现在我们用的也比较少了啊,也比较少了,像这个哈net的,那么它是专门去为我们的哈net的这个框架来进行这个数据库的这个存储操作的啊,就是事务管理的,所以说呢,就是呃,整个它是怎么去做的呢?来听我讲这底层呢,就是我们JDBC的API的那一类,什么事物管理在这个基础之上呢?封装了一个抽象层,但是抽层我们不能直接去使用,它在这个抽象层下面呢,帮我们去提供。
08:58
是吧,具体的一些实现,比如说JDBC的这个实现,然后呢,GDA的这个实现,好像我们have net的这个实现,因此我们在使用的时候,你只需要根据你具体使用的一个技术来挑选对应的事物管理器就可以了,而我们现在底层用的就是一个JDBC吧,所以说我们要挑选的就是data source trans3manager,哎,这样的一个事务管理器,明白这个意思了吧,所以说呢,大家要什么在学习这个事务管理之前呢,我们先得知道他破到底是怎么对这个东西进行了一个设计啊,就是刚刚给大家去简单讲的啊,画的那个图啊,就是这个样子的。
09:40
现在能明白了吗?差不多吧,啊,这个思想是差不多的吧,啊不明白啊,啊,这个没啥明白不明白的是吧?啊反正再说多了你也不知道对不对啊啊所以说那个这样啊,大家下去以后呢,啊,因为这个东西我就不再带着你挨个去读了啊挺浪费时间的也啊那么下去以后呢,你可以自己去把这个挨个去读一读,然后呢,再帮助你去理解理解,但是呢,大体上的思想我们必须得知道啊,就是我们刚刚提到的比较关键的几个,就是事务管理器,这个是特别关键的,明白了吧,那么一会我们再去写的时候,我们就要基于JDBC的这种方式,也就是我们的哎,Data source manager,通过它来去做我们的事务管理。
10:30
明白这个意思了吧,OK,像其他的这几个的话呢,我们暂时是用不到的,除非说将来你可能会用到哈net这个框架,那么你就要用到什么哈net衬衫是magic了,如果你用的是GTA的,那你就使用GTA衬下manager,好,现在的话我们用的是第一个,明白了吧,OK,这些呢,就是我们呃,Support它这个声明式事务管理的一些什么基本介绍啊,其实这里面大家去挑选一些这个核心的点的话呢,啊,第一个就是什么是一个声明式的事务管理,说白了就是通过什么呀,通过配置的形式,然后呢,基于a op的这种方式来动态的把事务管理的代码作用到我们的目标方法上面。
11:13
底层就是一个LP,好,这是我们挑选出来的一个点,第二个点呢,就是刚刚提到的事物管理器了,明白了吧,OK,好,那我们就给大家去这么多就可以了。
我来说两句