00:00
各位,我们继续来学习此任务框架。在刚才的内容中的,我们回顾了事物中的基本概念,包括什么是事物以及事物的四个特性,那咱下面就来搭建一下我们进行事物操作一个基本环境,通过这个环境我们来演示出此分里边如何实现事物的操作。那这个环境我们怎么搭建?给各位来写一下,咱要做的是事物的操作,咱们要搭建事物操作的这么一个环境。而环境怎么搭建,给各位来说一下啊,咱们在刚才提到我们事物中呢,有很多的场景都要用到事物,一个很典型场景就是银行转账的例子,所以咱们现在就搭建一个银行转账这么一个例子,环境,通过它来演示此分五里边如何进行事务操作,那怎么搭建,给各位画张图,咱先分析一下,然后通过代码把环境搭建出来。
01:09
我在这里边写一下,首先第一个各位应该知道啊,就是我们在我们的Java操作中,在咱们的Java环境中有这么三个层,不说各位是否知道JA中的三层结构,那我把这三层给大家画一下,咱们有这么三层,第一层我们可以叫web层。或者说叫视图层,然后第二层我们可以叫service层。或者说也可以叫业务逻辑层。然后里边还有第三层,咱可以叫DAO层,或者说数据访问层,这是我们Java操作中的三层结构,这各位应该知道,在外部层里边嘛,咱们一般做视图部分的机关操作,在四层里边,一般我们写业务上的一些操作。
02:07
然后在我们的Du层里边,这里边一般写什么呢?给大家强调,咱一般在do层里边写什么,就是对数据库操作的那些方法,就是进行数据库操作,而这里边一般我们不写业务上的操作。这个啊是咱说的L中的三层结构,那我们现在按照这种结构,咱们把环境做搭建,咱专注点在service层,还有Du层,那怎么搭建,给各位来写一下,因为咱们要做的是不是一个银行转账的例子,而银行转账咱在前面分析到了,它里边应该是有两个操作,一个是少钱的这个操作,一个是多钱操作,就是Lucy少100,然后marry要多100,这两个加一起构成是不是咱们一个转账的这么一个过程,所以咱们要怎么做呢?给大家写一下,首先第一部分在第一层里边,咱们肯定要操作数据库,在这里边呢,咱一般不写业务操作,只写专门对数据库操作,所以我首先第一部分在第一层里边呢,咱就可以创建。
03:21
两个方法。注意啊,创建两个方法,首先第一个方法就是这个Lucy少钱的这个方法。就是Lucy嘛,要转账100给Mary,那Lucy是不是要少100块钱,这是第一个方法,然后第二个方法,Mary是不是要多100,就是一个叫多钱的方法,咱写的通俗点,所以这是我们要做的第一部分,在第五里边,一会儿咱就见两个方法,一个叫少钱的方法,一个叫多钱方法,这是第一部分,然后创建之后咱来到service层,因为咱们提到service层又叫业务逻辑层,在里边我们做这个具体的转账的这个业务,所以在里边呢,咱就创建一个转账的这么一个方法。
04:10
然后在方法中怎么做呢?咱就可以调用DAO里边的两个方法。就是一个是少钱,一个是多钱,Lucy先少100,然后marry再多100,通过这个过程构成咱们一个完成转账,所以这个啊是我们要做的一个过程,我再重复一遍,然后咱们开始搭建做法,就是在do里边咱们建两个方法,一个是少钱,一个是多钱,然后在service里边建构转账方法,在转账方法中分别调Du中的少钱和多钱方法,最终构成咱们这个转账的过程。这个啊,就是咱们环境的一个搭建过程,咱们现在就这么来做,我把这个图给各位截过来,然后咱们按照这个过程把环境做个搭建。
05:04
这个啊是咱们一个基本分析,然后分析之后,下面咱把这过程具体来做一下,首先第一部分,因为咱们肯定要操作数据库嘛,所以我现在在我的数据库里边,咱就创建一个数据库,包括创建一个表。我写一下啊,创建数据库的表,然后那表里边给它添加上一些记录,为了咱们一会儿能做出更实际的效果,这是我们的第一部分,创建数据库,创建表,然后里边添加记录,那我们来做一下啊,比如现在我来到数据库,我就在我们之前那个user DB里边,咱们现在建个表,比如把这表我用这个工具创建。表里边首先第一个字段。咱就写一个ID,然后ID比如就写一个这个。涡差类型。然后它的长度就来一个这个20,然后它是一个主键啊,这是第一个字段,然后第二字段就写一个username,就是用户名,然后里边类型也是来一个what,它的长度也来一个50,这是第二个,然后第三个,因为咱要做到转账,转账是不是要你的钱呀,就是你的金额,所以咱们给它起个名字,我就叫这个。
06:25
Money,然后给他来个类型,当然类型呢,你可以用那个钱的那个类型,比如为了方便,我就给他写一个it类型了,或者用float,或者用家类型,咱用它来完成我们这一个表,然后写完之后把这表创建,给它起个名字,我就叫这个T下划线,因为咱是转账嘛,我叫这个account。就一个账户表。所以这样的话,咱把这个表就完成创建,在里边有一个叫T下线account这个表,然后在表里边我手动加上两条记录,比如来一个一,来个二,一就是这个Lucy,二就是Mary,比如现在让两个人他们都有这个,都有这个1000块钱。
07:12
两人都有1000块钱,所以这样的话,咱把这表创业,因为咱要实现Lucy转账100给Mary,这个啊是我们。第一个为工作,咱把这个表和里边的记录给它完成这么一个添加,包括创建这一步做到了,然后这步做到之后,下面咱开始写这代码,在代码里边呢,咱肯定是完成service,还有Du这过程,就刚才有这张图上画的这个过程,那我们来写一下啊,首先第二部分咱做法就是在我们的项目中创建我们的。Service,然后创建你的这个Du接口,包括实验类,然后完成这些对象的创建。
08:01
还有它那个就是相关的一个注入。和注入这个关系,以及在里边咱可以配置它的连接池等等这些内容,咱把这些给它都完成,这个啊,咱在之前应该做到过,就这里边写的具体点啊,咱的做法就是在我们的。Service里边是不是要注入DA,然后咱们在do里边要干什么?各位可以想一下,咱之前写过第一个里边是不是要注入咱们那个JD bc com模板,然后在JDBC模板中要注入我们那个data source。写一下啊,DDBC模板中。注入这个data source,所以咱们现在把这个过程,我们给它做一个实现。这个啊是我们要做的事情,那咱下面把这步骤我们就快速给他写下。
09:03
咱们来看怎么做啊,你之前应该都写过类似的,那咱们现在我就来到咱这个项目中,为了区分,我把这项目咱现在给他重新复制一份,为了咱们做出更明显效果,因为之前这里边做的是我们那个JDBC模板的操作,咱现在把它复制一份。那我现在复制一下。然后复制之后给它改个名字,比如叫这个SPRING5啊,咱叫事嘛,就是这个TX。DEMO1DEMO1把这个我们给它做一个复制。然后复制之后,咱们把这个复制之后的项目给它打开到我这里边,我这应该是在E盘work目录里边有一个spring TX demo1就关于事物这个操作,咱找到这个。把它直接打开。
10:01
然后打开之后,咱把他的名字给他改一下,最终在里边完成咱们刚才说的过程,就是一些最基本准备工作,包括咱们把这个转账的过程。环境给它快速搭建出来。那咱们下面给他弄一下啊,我等他先加载完成,就这个先加载出来。好,这个加载出来了,这些我先关掉,然后在里边先把这个项目的名字先改一下,我们叫此文5TX1,然后改完之后,在这里边有一个基本的结构,那这结构我们看一下啊,就是现在里边就是咱们做的应该就是这个结构。大家看结构中,首先有个service,有个do,包括有实体类,还有一个测试类,包括有这个配置文件,咱们应该就这个结构,那结构中咱看一下啊,首先在配置文件中,这个咱应该不需要变,因为这是我们之前写过的,咱看一下第一个。
11:05
组件扫描第二个数据库的连接池,咱用的是得入一的连接池,然后第三部分创建JDBC模板对象里边注入data source这些应该都可以,然后咱下面在里边就完成这个service,包括do的过程,那这过程我给各位重新写一下,我把之前的我们先给它删掉。这些啊,咱先都给他。删掉,然后咱们重新把这过程给他完成一下。把这个啊先给他。拿掉。这是那个测试类里边这部分给它也是先删掉。啊,这样的话啊,我们有一个最基本环境配置文件中,之前写过了,我就不再写一遍了,也跟之前一样,就是里面这些配置,然后咱下面按照咱的过程,就是刚才我图上画的,咱先创建一个service类,再创建do的接口实验类,然后完成他们的注入关系,把这个先做一下,首先service类我起个名字,因为咱做这个转账过程,所以我就叫user。
12:16
Du啊,就是你用户,比如一个人给另一个人转账,这是我们见的第一个类,然后创建之后把这个类的对象创建,咱们加上这么一个注体,就是service,呃,这个名字啊,应该改成我们那个service啊,不是do。给他改个名字啊。名字改一下,我叫这个user service。这个我们做个创建,然后在这个上面我们加上一个service的这么一个注解,把它的对象做个创建,这是第一部分,然后创建之后咱再创建DA,在Du里边先写一个interface接口。Do。
13:01
然后接口写完之后再写它的一个实现类。咱们来一个user。DOMTL让它实现我们这个接口user do。这样的话我们做到了,然后在第上边咱也是加个注解,我就加这个repery,把它的对象做了创建这个完成了,完成之后下面咱们做注入,在service里边咱肯定要注入这个DAO,按照咱们之前学到的怎么注入,各位应该能记得啊,你可以用一个注解叫O或者call fair或者results都可以,我就用个O。然后加个private。我们这个叫u Du,然后它叫user Du,把这个Du的对象先给它注进来,这是第一部分,然后注入之后在我们的Du里边再注入那个就是JD bc com里头,或者说JBC模板,咱来一个O。
14:07
Private加上我们那个模板对象。把这个啊给它注进来,包括在模板中,咱要注那个data source,这个过程在配置文件中咱之前都写过了,所以这样的话,把这个就是对象创建,包括里边的相关的注入关系我们都完成了,这是一个基本的一个搭建。然后把这里边的核心部分给各位复制过来,在service里边我们做这么一个。注重。然后在do里边也完成了这么一个注入,包括在配置文件中,咱配置了连接池,包括它的一些加部分,这个啊我们做到了,然后做到之后下面咱在里边就写一下我们的具体的方法部分,按照咱们刚才做的分析,在do里边呢,一会儿咱们写两个方法,一个是少钱,一个多钱,然后S里边写一个方法调这两个方法构成这个转账,那咱们下面写第三部分。
15:12
我写一下。在Bo等。这里边我们创建。两个方法。一个是多钱的方法,还有一个是少钱的方法啊,少钱啊少钱的这个方法。这个,然后咱们在service里边也是创建一个方法,就是咱们那个转账的这么一个方法。这个啊是我们要做的事情,那咱下面把这个快速给它弄一下,咱现在搭建环境就为了一会儿通过spring更加方便,因为咱做事物配置也要结合我们这个转账例子,各位看到更加明确,那咱写一下啊,先来到Du里边,在Du里边呢,我先创建两个方法,比如我们写一下啊public,我就模拟这个过程啊,所以咱就来一个word啊,第一个来一个多钱的方法,我就叫A。
16:10
Money就是增加钱,这个是一个方法,然后再来一个少钱的方法,少钱我要这个reduce。Money。一个多钱一个少钱,然后咱让Mary少100,然后Lucy就Lucy少100 Mary多100,把这做到这个啊是两个方法的,这个创建我写个注释。第一个是。多钱的方法。第二个是。少钱的这个方法。然后写完之后咱们来到它的实现类中,在实现类中把两方法我们写一下,其实两方法咱可以写一个方法,就是在account里边咱做一两次调用就可以了,大家为了方便给大家写两个,让各位看到更加明确,写一个交易能做到就是你把一个方法调多次啊,功能都是一样的。
17:03
咱为了明显,我就用两个给大家演示,这样的话看的更明确,然后写完之后,咱现在多钱里边,少钱里边写它的功能,那比如说我们现在先写这个少钱的方法,因为大家知道咱们做转账的过程,一个人要少钱之后,另一个人是否多钱,比如说现在我们要实现Lucy转账,100给Mary。转账100给这个Mary,那这个过程中Lucy是不是要少100啊,所以咱们在这里边就实现Lucy少100的过程,那来看怎么做啊,少100其实就让这个值减100就可以了,那呢,我们这位置首先写一个SL语句。这个语句呢,咱是根据Lucy让他的这个钱少100,所以咱就写一个update是不是就可以了,Update我加上咱这个表名字这个account,然后加个set。
18:07
里边这个money money等于它要减上一个值,因为它要少100。这个各位应该能看懂啊,就是你的钱要少一个值,然后根据这个条件,就是我们这个username username是我们这个Lucy Lucy要少100,这个啊是我们写的语句,然后写完之后咱就调用JDBC模板中这个方法,咱们在之前提到是RV的方法里边传入SQ语句,然后传参数,参数中两个值,第一个值是它要少100,第二个值是谁少100,因为咱们现在是不是Lucy少100,最后这位置传个Lucy,这样的话,咱们把第一个方法完成了,Lucy少100。然后写完之后,下面咱再写那个麦多100,跟它写法是一样的,我给它复制改一下啊,这个值要多100。
19:05
然后这里边我们就传一个叫。MY是不是可以了,这样的话把两个方法创建了,当然你写一个也可以,就是通过不同参数给他传也可以做到啊,咱这么写让各位看到更加明确,这是我们写到do的部分,咱们把两个方法就创建出来了,这个完成,然后完成之后下面咱们写这个service。各位注意,因为咱们现在要做的是转账的操作,按照咱们的JA的三层结构,在service层是不是又叫业务逻辑层里边做咱们真正业务,比如说现在一个人少钱和一个人多钱,这两方法都执行之后,才构成是咱们的转账过程,所以我现在在我们这个C里边就建一个转账的这么一个方法,里边做这么一个调用,那我们写一下啊,比如这里边我来一个Y。
20:04
这方法起个名字,我就叫这个account。Money就是这个账户这个方法,然后在里边我们就会调用第一个咱这个Lucy。要少100。然后第二个MY是不是要多100,这两个过程加一起构成咱的转账,那我来调一下啊,第一个就调这个叫reduce money,就是Lucy。少100,然后第二个我们调这个user Du里边这个A的money me是不是多100,而两个方法加一起,最终构成的是咱们的转账过程,所以这样的话,咱们把这个。Service还有do部分我们就完成了,我把这个代码给各位分到我们的底中来,所以现在环境就搭建完成了,就是这么一个过程啊。然后这个代码咱再快速浏览一遍,最终咱们给他做个测试。
21:05
咱们浏览一下啊,看一下这里边这个过程什么样的。首先我们看到啊,在这过程中呢,我们的做法就是先在配置文件中做了基本配置,包括开启组件,扫描数据库、连接池和JPC模板,然后创建service,创建do service里边注入Du Du里边注入JDBC模板,在do里边两个方法,一个少钱一个多钱,Service中转账分别调两方法完成咱们最终的过程,这样的话咱把这个就做到了。然后做到之后,最后咱们写一段测试代码,把这个效果咱们做一个最终的测试,那我们来测试一下啊。咱们来一个test public就叫test。Account,然后在里边按照咱们的写法先来一个application contexttest等于new上一个pass,加上配置文件,咱们是。
22:07
B一点。叉L,然后咱们通过context得到你那个对象,就是我们这个user service这个对象。这里边啊是U。service.class把这个得到,然后得到之后咱就可以调用user service里边那个叫account money完成转账,那咱们把测试方法就写完了,写完之后咱们测试一下啊,看一下这个效果。咱先做个执行。然后看他数据库中数据的变化。大家看啊,现在我这里边一执行没有报错,因为没做输出嘛,然后咱们看表里边大家注意,如果说效果正确的话,那Lucy是不是要少100,麦是不是多100,因为他们目前两人在没有多没有少情况下,两人都是1000,但是最后要发生变化,现在我刷新大家看到变化Lucy。
23:12
是少了100变成900麦变成了1100,这样的话效果是不是做到了,所以咱们现在就把这个转账的环境,我们做了一个搭建,各位把这过程要特别熟练,这个过程就用到咱们之前学这个操作,包括怎么创建这个B的实例,或者怎么创建对象,怎么注入属性,包括怎么去完成这个数据库连接池,包括这些配置,以及我们里边这个调用这个过程。包括怎么写这个测试代码。这个啊,是关于环境的这么一个大件,咱把它就最终做到了。
我来说两句