00:00
各位同学大家好,刚才呢给大家演示了JDBC实现对数据库的增删改操作,那下面呢,我们就正式开始说这个事物的新闻内容。首先呢,给大家先。回顾一下事物中的基本概念,那咱们快走看一下啊。先看第一个概念,什么是事物?大家可以简单理解为,事物是什么呢?它指的是逻辑上的一组操作,这些操作要么都成功,有一个失败,所有都失败。那给大家举个具体例子,一个典型例子那就是银行转账。比如现在啊,两个人Lucy Mary Lucy转账100给Mary,那Lucy是不是要少100 Mary是不是要多100呀?是不是两个操作,但这过程中,比如说啊,Lucy钱少了,Mary钱没有多,这个时候事物会进行回滚,只有两人都成功,那才要成功,任何一个人失败,那他们都不会成功,这个就叫事物。
01:04
这个大家给他知道啊,然后咱们再来看事物呢,有四个特性,原子性,一致性,隔离性,持久性,就是咱通俗说的acid特性。那四个特性什么意思解释一下啊,第一个原子性,它指的是不可分割一个整体,要么都成功,一个失败都失败。第二个叫一致性,什么意思呢?指的是操作前,操作后,他们处于一致性状态,比如说我现在啊,Lucy Mary都有100块钱,他们两人加一起是200块钱,Lucy转账十块钱给,那这个时候他们就算转账之后总量是不是还是200,不要说转账之后总量变少了或者变多了,这个不应该,这个叫一致性,操作前后总量不变。第三个叫隔隔离性,什么意思呢?比如现在我多个事物操作,那多个事物之间没有影响,只有事物提交之后才有影响,这个叫隔离性。还有一个叫持久性,当事物最终真正提交,那表中数据就真正生效。以上就是事物中的基本概念,什么是事物,以及事物中的acid特性。
02:23
那咱们继续来看啊,此论里边呢,支持编程式事务,还有声明式事务。先说编程事务,它指的就是啊,我们用代码方式来自己实验事物,比如说你现在开启事物,提交事物,回滚事物,这个过程中完全需要手动写代码实现,大家也看到它并不是很方便,而S里边把这个过程给我们做了封装,咱通过S可以让框架通过配置能实现事务功能,所以咱们重点演示就是声明式事务管理。所以这就是概念上的一个基本介绍。
03:03
那下面呢,我们开始看这个声明式事务管理,在里边用两种方式进行实现,第一个基于注解实现,第二个基于X经实现,那咱们先基于注解来做到,那怎么做呢?首先啊,咱们做一个环境的准备,给大家说一下我们目前这个场景,咱通过什么场景来演示事物的过程。我这里边给大家说一下啊,比如说啊,咱们现在呢,我们要做功能就这个用户啊,他这个买书的这个过程,通过它来演示事物中的相关操作。那这个我们具体怎么做呢?我把过程给大家先画一下,然后一会儿我们具体进行实现,比如我们现在啊有两张表,给大家画一下两个表,第一个表呢,我们就是用户表。
04:00
第一张表,用户表。然后第二个表呢,我们叫这个就是图书表。在表里边有它的内容,比如说啊,我们用户表里边,咱给他假如说我有这么几个字段啊,我就写一下啊,比如说第一个字段是这个用户,这个ID,包括用户的名称等等,咱就来一个ID啊,来一个名称,然后这里边有用户,它那个就是余额,就是他有多少钱,咱们主要有这么几个字段,用户ID,用户名称,用户的余额。那我在里边,比如说我啊,随便给他加入一条数据,为了咱们说着方便。我在里边加一下啊ID。名称还有余额。假如说现在有一条记录,ID是一。它的名称是Lucy余额,它现在比如说啊,有这个500块钱,这就是用户表,然后这里边呢,还有一个叫图书表,那这里边我也写一下,在图书表里边,比如说我们有这几个字段,有图书的ID。
05:11
图书的名称,包括图书的价格,以及图书这个库存,我们叫这个位置啊,咱叫库存先写一个中文啊,对咱看着方便。库存主要比如我们有这么几个字段啊,咱为了方便啊,我就写个名称了,咱们主要看核心部分。这个是我们这张表里边,咱们也是给它加入就是这么几个简单数据。比如说加到这里边啊。假如说现在啊,比如说我这个图书的名称,比如咱现在有本书,就这Java开发啊这本书,然后图书的价格,比如他目前是这个50块钱啊,假如这个价格,然后库存量,比如他目前有这个200本这个书,这是我们两个表。
06:04
那我现在比如说啊。我想要买一本书,那咱怎么做呢?说一下这个过程,咱们首先的第一步操作,比如现在啊,我先根据这个就是图书,就先查询一下这个图书的价格,比如这图书咱目前查这个Java,它的价格应该是这个50块钱啊,先查它的价格,然后查完之后怎么做呢?因为咱要买书嘛,那里的第二部分操作,咱这里边的库存量是不是要有一个变化,就是要减库存。就是你的图书表里那个库存,要让它减一或者有一个变化。减一,然后之后呢,我们买书之后,你的账户的余额是不是要变化,就是我们用户的。表里边的余额要有变化,变化是不是就是减这个50,因为图书是50块钱,这是我们一个基本的过程,所以用它那就说明事物,比如现在这个过程中啊,假如说我现在用户库存,它里边成功了,就是减一,但是我余额出了问题,或者说我余额成功了,库存有问题,那这个时候有任何一个失败,他们是不是都不能买这本书成功,只有他们都成功才叫成功,这个就叫事物的一个过程,所以咱用它来模拟出事物的一个操作,咱们基于注解方式生明事物,还有叉买lo方式进行生命式事务操作。
07:39
这是咱们一个例子说明,就是减库存减余额,最终完成买数的过程,这各位给他清楚啊,这是咱们一个分析,然后下面呢,咱们把这环境先做个搭建,最终我们再进行实现啊,咱搭个环境。那我在里边写下啊,首先我们的第一部分,咱们我就按照课件中的过程啊,咱们先建个配置文件,然后在里边呢加上一个就是组件的扫描,这个我就复制了啊,跟之前写的都一样,这配置文件我就用刚才那个JDBC那个配置文件了,因为咱目前也需要操作数据库,我在里边呢加上这个就是组建的扫描,咱们把它加上。
08:23
组件扫描。这是我们写的这部分啊,我们叫什么六,然后在里边做具体操作。包括啊,我们在里边,咱们再来建个包,这个包叫专门做咱们事物的相关内容。点上PX。然后这个之后呢,下面呢,咱们把那两张表做个创建一个图书表,一个用户表,我这里边有建表语句,咱把这个直接创建一下,那我现在做一下操作,我们在这个这个数据库里边,咱们先建第一张表,就是这个图书表。
09:06
我把这个执行。咱们进行创建,然后图书里边大家看啊,有ID名称,价格,还有这个stock,就是库存,就是多少本书,包括图书ID是主键。这个啊,是我们看到的第一张表,然后之后呢,我们再加第二个表,就是这个用户表。我把这个语句直接复制过来,咱们把它也是执行一下用户表。现在我来执行。然后大家看啊,在这里边呢,有几个细节问题啊,各位看库存我加了这么一个结构,就是它里边叫做无符号,因为库存不能是负值,包括你看啊用户表里边ID名称,还有一个叫balance,它可以翻译成余额或者平衡意思啊,这里边咱作为余额使用,这余额肯定也不能是负值,所以现在啊,咱们把这两个表都给它做了,创建一个图书表,一个用户表。
10:04
然后表创建之后,我们向表里面给它加入几条数据啊,咱为了测试啊,首先我们加上这么一个,就是用户的这条表里的数据,把这语句我直接复制给它加进去就可以了。比如这里边啊,我们加一个用户ID是一。名字啊,咱就叫Lucy了,然后他的余额,比如是500块钱,把这个给他加上,这是用户表里,我们加了这条数据,这个完成,然后像图书表里边,咱也是加入数据,我把这个复制一下啊,这是图书表里数据。这个啊,给他拿过来啊。然后咱们看这数据啊,然后在里边我就加上两本书,呃,这个书呢,咱加的有点。就是优雅点或者有点实际意义的书,这种书没有任何意义啊,咱就不加这种低端的书了啊,咱加点就是高雅的一点的书啊,就咱们随便搜一个,呃,加个什么书呢,比如这本书。
11:09
啊,大家知道啊,就是最近有一个很流行一本书,我希望各位都去看看这种书啊,别看这种没有意义的书,什么什么什么什么,这个没有任何意义啊,咱们找一本书来看啊,比如咱加这个。呃,这个就是习近平谈治国理政,我觉得各位看看这种书啊,这种书更有实际意义,就咱就加上这本书。我把这个啊给他拿过来,第一本书加上它,它的价格,呃,这个我没买过,应该在100块钱左右吧,啊,咱就加个100块钱,比如它的库存量啊,是这个200库存,然后第二本书我们加一个,加一个什么呢?比如咱们随便加一个啊。我们加一本呢,就是中华人民共和国宪法啊,咱就叫宪法。各位多看看这本书啊,哪怕你每天看看婚姻法也好,至少比你看这种书更有实际意义。
12:06
你多看看治国理政,多看看宪法,宪法应该这个比较便宜的啊,我前一段时间买过,应该有本也就是十块钱,比如库存量,假如咱们有。就是100个啊,现在把这两本书给他就加进去。这个啊,咱们就完成了数据的准备,加了两本书,习近平谈治国理政,包括中华人民共和国宪法,这个完成,这是一个数据的准备,然后准备之后呢,咱们下面在里边创建出它的controller service,包括DAO,那咱们快速进行创建,我在这里边创建下。首先咱们把这个包先创建,第一个就是这个CT。第二个我们。我写到这里,Service。第三个包叫DAO。
13:03
这个拿过来,然后在里面创建啊,第一个controller,咱们创建我就叫不controller。这是第一部分,然后创建之后在里边创建service service呢我们先写个接口叫book service。再写它的实现类,这实现类呢,我就不写包了,在里边直接创建一下啊book service m PL,让它实现这个接口book service,然后再创建DAO的接口实现类。写到这个位置,它叫不考DA。然后加上它的时间内。实现这个接口。所以现在啊,把这些类就创建了controller service还有do以上啊,就是我们说的这个准备工作,然后这个之后呢,咱们下面在里边可以写我们的具体部分,大家看这结构中啊,Controller是不是调service service是是调我们的DA,最终实现咱们买书这个过程。
我来说两句