00:00
咱们下午啊,主要来演示这几个内容,首先我们演示MP做修改,演示修改的过程中会给大家演示一个叫自动填充,还有一个叫乐观锁,这一会我具体说,然后演示之后,然后演示用MP,就是做分页查询,或者它的逻辑删除,以及最后咱演示MP实现里边这些条件查询。就是把MP的增删改查操作的其他部分,咱们下午都给大家演示出来啊,这个啊是我们要下午做到的,那首先先给大家演示第一个内容。我在里边写下啊,演示什么呢?我这里强调啊,给大家来演示,就是我们使用MP实现这么一个修改操作啊,用这个我们来做到LP做修改。那这个怎么来做啊,这里边啊,我来说一下啊。呃,同学说到还是没有声音啊,那你看是不是浏览器,包括你再刷一下,它也会有一个提示说浏览器好像是否播放声音,好像那个没有打开啊,或者你换了浏览器试一下,我这边设备应该是正常的啊。
01:09
然后咱们去看啊,LP做修改,那我们下面啊,咱就直接写代码,用代码把这效果我们来直接测试一下,这是咱们上午写的,查所有还添加,然后这里边我们做一个。修改操作啊,咱写一下还是写一个单元测试。我加一个public,比如我叫update。右上。啊,这是一个修改,然后修改怎么做呢?这各位要知道啊,咱们看这里边,比如说我现在啊,举个例子,我想把这个就是。杰克的年龄,他现在是20,假如我现在就把20改成这个30,那如果说啊,我们要写普通的搜狗语句,我觉得各位应该都会写咱的普通语句,是不是写个update,然后加上你的表名称,加个set,比如说age等于30,最后加个条件,比如咱就是ID等于这个二。
02:09
啊,这是我们写的一个自由语句,而现在我们要做修改,其实它的底层也是用语做到,而这语句中我们就是根据ID自由修改啊,那咱们把这个就来写一下,怎么做呢?在user map中有个方法。这个方法。大家看它啊,它叫update by ID,就是根据ID进行修改,然后这个方法中,咱应该清楚的看到里边传的是不是一个优色对象啊,那咱们给他就传个对象,那我来传一下啊,这对象我还是直接咱就谬一个。这个优惠对象,但是这里边有个特点,希望各位注意啊,这个特点是什么呢?就是现在这个右侧里边,因为咱要根据ID是不是做修改,所以说他要传对象,咱们在user侧里边必须要设置它的ID值,因为它里边要根据ID修改,那咱来设置一下啊,比如说我现在咱就找一个我们上午加的。
03:08
啊,就是还找这个二这个啊,就是二这个杰克,他的ID是二,那我里边写个二。但是我写完之后,大家会发现这里边报错了,这个错误我觉得各位应该能快速找到啊,你看user。什么类型?是不是浪类型,所以咱写值的话,后面是不是要加上一个L,表示它是一个浪类型啊,咱设一个ID值,因为我们现在想改它那个A,比如改成这个30。啊,比如说为了明显给他换的大一点啊,咱他换成这个,比如说120啊,因为人嘛,最长寿命应该是120岁,只是说你平时不注意嘛,可能最终就是跑到了30岁啊,这是有可能的,咱就给他改一个值,然后改完之后在里边把U侧传进去,最后它有一个返回值,也就是他那个影响那个行数,就是它成功改了几条记录。
04:01
咱把它做输出啊,这就是一个修改操作,咱们就是这么来做啊,一个最基础的一个代码。我把这个截过来啊,然后这个写完之后,咱把它快速测试一下,看一下结果,因为咱要把这个ID是二的,这个人的年龄改成120啊,咱来把效果我们来最终试一下啊。那我们看一下啊,这里边执行了,咱们还是看一下底层的语句,上午咱做过那个配置啊,就是在配置文件中加了它能看到底层语句,然后再看语中第一个update。是不是思语句第二个是不是参数,最后返回值是一,就是咱们成功改了一条记录,然后改完之后到表里边我们刷新。大家看A是月20啊,所以这样的话,咱就完成了一个修改操作,用MP实验了一个修改啊。它就是这么一段基本代码,咱直接调这个叫update BYD,就根据ID可以修改,然后它底层语句就是咱们写那个根据ID把这纸做了一个修改。
05:11
啊,这个我们就做到了。然后在修改的时候呢,里边有个细节,希望各位能看清楚啊,大家仔细看啊。我这个user对象中是不是设置了ID和A,因为咱要根据ID是不是改age啊,而其他值我是不需要改,所以说你发现啊,它给咱们生成的语句中是不是只有A纸,没有name,没有email,我因为我没做修改啊,所以它里边有这个特点,也帮我们做了一定的优化,就你改什么值它就去改什么,不改的值里边语中就没有,比如说你没有改内,没有改email,那里边就没有,只有你设置这个要改的值。也就只有这个H。啊,这个啊,我们把它就做到了,关于MP做修改操作啊。这咱们就快速实现了啊。
06:00
这个应该没有什么难点啊,你直接用它就可以做到,然后这个说完之后呢,下面我想重点讲的是这个东西,它叫做自动填充。啊,这是我要讲的一个是自动填充,还有一个叫乐观锁,咱们先说这个叫自动填充,那什么叫自动填充,我先来解释一下,然后一会儿直接咱用个效果给大家来演示这个东西啊首先咱看一下LP中,在LP里边呢,咱往下找里边有个地方,它叫自动填充。啊,咱找到。自动填充这里啊,自动填充功能,然后自动填充功能呢,在MP它的官方手册中就告诉我们这个过程该怎么去做,那我来解释一下自动填充是什么意思啊,给大家来说明,我来举个例子啊。比如说啊,大家注意我这里边啊,咱就详细来演示啊,这是MP做修改,这张图我先保存一下。
07:01
咱的第七张图。MP实现修改。然后这个做完之后,下面给大家来说,这个叫自动填充。我小这个位置啊。自动填充,那什么叫自动填充,下面我来解释一下啊,首先呢,就是为了能够更好的演出自动填充,咱先做一件准备工作,要不然后面不好演示,那做什么准备工作呢?就是首先呢,咱们在我的表里边。添加两个字段。啊,就是加两个字段,为的更明显,然后对应我们的类中也加两个属性,那咱们加哪两字段,这里边我来写一下啊两个字段,第一个字段我们叫这个它叫做。Time。还有一个字段叫update。那咱们看这两个单词,我觉得各位应该能看清楚,他们这两个是什么。
08:04
大家看啊,可瑞的time。Create是不是创建,就是创建时间,Update time是不是修改时间,比如说咱在表中加两个字段,这字段我已经提前加过了啊,或者说你这里边用工具,咱点一个al table,如果你用中文版,应该叫改变表。啊,因为我不会用中文版,或者会用英文版啊al table中文版应该叫改变表,你点它之后呢,在里边加两个字段,一个叫create time,一个叫update time,咱把这两个字段加到表中,然后他们的类型都写成叫data time啊,就是日期时间类型,这是我们要做的第一部分。然后这两个什么意思呢?给大家强调啊,我说一下它的特点,比如说我们现在我每次加一条记录这位置是不是要得到你的创建时间啊,就是你当前时间,而我每次修改记录update time是不是要修改,假如我现在是在14:12加的数据,那这时间14:12,比如我现在在15点改了数据之后,那update这个时间是不是要做修改?所以这是两个字段,一个叫创建时间,一个叫修改时间啊,咱用用它的演示。
09:15
然后这个加完之后,我们的第二部分,咱需要在我们的实体类中加上对应的属性。啊,就是添加实体类中的属性,也就是说在实体类中咱也加个create time和update time,那我来加下啊,来到咱这里边加上两个属性,第一个private,我们加个date啊,就是这个日期类型,然后这个叫create time。但是各位注意啊,这个命名特点。我说各位之前是否提过啊,不管你提没提过,我这里特别强调啊。就是你在表中的这个字段叫create下线time是不是带着一个消线的方式,而咱在实体类中要形成一种叫驼峰式,也就是说你把这个create time。
10:04
这种方式,它这个下划线去掉,然后你把第二个单词的第一个字母变成大写,是一种驼峰式,咱用这种方式做创建啊,这个要各位知道啊,如果你之前不知道,给他记住,你就是表中字段这种形式,要把它变成一种驼峰式的写法,因为它有这么一个特点啊,然后这是创建时间,还有一个叫修改时间。Update time,那我们也写一下private,这个叫update time。啊,就是这么两个属性,咱们加到我们的实体类中,这个各位给他知道,我这里特别标注一下啊,注意它那个就是。命名的那个特点啊,就是咱用驼峰是吗。第一个字母啊,包括这个大写这种方式,这是第一个准备工作,然后准备之后呢,下面来用这个例子给大家演示什么叫字母填充啊,那我来说一下,比如说咱们还是找咱们上午这个代码。
11:06
这个代码咱上午做到咱们调音色的方法是不是做添加呀,但你注意啊,如果说我这么添加在咱们加完到数据中,比如说我再加个数据,然后咱们换个值啊,这里叫Lucy。嗯,那我再换一个,比如换一个这个me。啊,咱再换一个纸,然后把它,比如说我给他直接执行,咱们做个添加啊,咱先看我们上午这个效果。把添加做演示。这里边啊,咱等它执行出来。啊,现在啊已经执行了,然后咱到表里边看一下,大家看麦RY是不是加进去了,但你发现啊,现在加的麦中这时间是没有纸啊,因为咱没有往里面放纸,如果说按照咱们上午方式,我想加时间,咱是不是需要这么来做,我写一个叫。
12:00
Set这个。Create time,比如里边我直接new上一个,包括比如那个修改时间一样,我来一个set叫update time,里边咱也是new上一个date,如果说咱们这么做的话,那这时间是不是就能加到咱这边去了啊,就是这么做是完全可以的,这是咱们最原始方式,就是咱需要自己手动来做个设置。我这里边啊,特别标注一下,你需要手动来设置这个时间的这个值。啊,这是我们最普通方式,但是现在呢,我们用了这个,就是买BT的plus之后,咱们其实也能让它加时间,但是咱可以用MP的方式把这个时间加进去,而用MP的方式的做法就是不需要你用赛的方式做,而用MP自己特有的方式也能把时间加进去,这一过程就叫自动填充。说的通俗点,咱们再写这种代码,不需要写这个set,而用MP的方式可以把这时间最终也能给他加到咱们的税库表中,这个过程就叫自动填充。
13:10
啊,也就这里边我简单写一下它的特点,就是不需要咱们塞到那个对象里边这个值。而使用MP的方式能实现这个数据的添加,这个过程就称为叫自动填充。啊,所以大家把这个概念先理解,就是不用set,用MP的方法做到。啊,这是咱们对这个概念上一个解释,那这个具体怎么来做,给大家来做个演示,这个过程因为用的是MP的方式,做到它有一个固定做法,比如说里边一种思路,希望各位明确。因为咱们现在用这个MP理解为是不是一个框架,那我们用框架就按照框架的规范来做,比如说咱之前学过spring,学过什么买威Dis,学过什么其他框架啊,那咱们做法按照框架来做,所以下面咱说一下怎么来做啊,咱先看一下啊,比如我来具体演示,首先在他的官方文档中说的很清楚,第一步。
14:10
你需要在你的实体类的那个属性上边先加个注解啊,注解一会儿解释,然后加完之后咱需要自定义一个实现类单让实现类需要实现一个接口,然后里边有它的方法,两个方法,一个叫insert,一个叫update,就是一个是添加的时候执行,一个是修改时执行。这个啊是它一个基本步骤,那在下面我就按照这个步骤,咱来写一下这个代码啊,咱看怎么来做这个自动填充。或小D位置啊。自动填充它里边那个具体的实现的过程。那怎么实现,给大家画一下啊,首先里边的第一步。我先这么写啊,就是第一步,咱就需要在我们的实体类里,你要进行自动填充的属性上边添加这个注解,这是它的第一步,在你要做自动填充的属性上加注解。
15:13
那咱们啊,来到我们的实体类中,我把每一步给大家都写到啊,那咱看到啊,实体类是不是UR,而咱要做自动填充的属性是不是这两个属性一个叫可time,一个叫update time啊,所以咱们在这两个属性上需要加注解。那我来加一下啊,我强调啊,这注解呢,不太好记,但我要求各位你多写几遍,最终要给他记住,你到后面会一直写这个注解啊,那我来写一遍啊,首先它第一个注解叫table field。就是你这个属性啊,跟表示这个注解,然后加完之后在里边有一个叫feel feel中有一个注解,这注解最不好记啊,它叫什么呢?叫feel的。定住解,然后后面加上你这个操作,那这操作有什么注意啊,里面有多个。
16:05
那给大家强调什么意思啊,比如说我现在写个insert insert的含义是不是添加呀,也就是说啊,你在做添加的时候,那这数据中会有值啊,它就相当于添加的时候咱们给他设set,就一个值,只是现在不需要set用注意做到当添加的时候里面有值,然后这是修改,跟上面一样,咱加一个叫table field,然后加一个叫field,等于field到field。然后这个值我们加什么呢?其实咱们可以加一个update。写下update啊,但是因为我们现在呢,就是我第一次添加,因为还没有做修改,所以咱给它加上这个值。这大家看一下啊,什么意思呢?Insert update就是你添加和修改的时候,里边都纸啊,或者你直接加update也可以啊,咱一般都加成insert update,让他第一次加里边有数据,所以咱们现在这么来做,在你就是要进行自动填充的属性上边,给它先加上这么一个注解。
17:08
注解就是这个东西啊,要各位把这个注解给到自己去记记啊,因为后面这种注解咱会经常写到。啊,就是这个table field field等于field field insert或者insert update,这是里边的第一步操作。啊,这一步做到了。然后这步做到之后,我们再做第二步操作,我写一下啊第二步。然后第二步怎么做呢?刚才咱们也看到它那个文档中写到,咱需要就是自己来创建一个类,让这个类呢实现一个接口,这个接口叫做我写一下啊,叫might object handle。啊,实现这个接口。啊,ETA。然后实验之后,我们再实现接口中那个方法。啊,接口里边的方法,这是里边的第二步操作,咱需要自己建个类,然后实现一个接口,最终实现接口中的方法,啊,那咱下面把这步写一下,或者说咱看文档中这一步咱做到了,第二步就在这个事情。
18:15
那我们来写一下啊。怎么来做呢?为了明显我在里边呢,咱们再建个包,给这个包我就叫handle了。啊,Handle就是一个处理器,在handle中我来建一个类,类的名字随便起,比如我就叫这个啊,买这个might object,看到了,这是我创建一个类,然后创建类之后让这个类实现一个接口,接口就这个叫might object。看到了啊,你注意这个类啊,就这个类实现这个接口是苞米豆中这个接口,然后咱们把它的方法做实现,它里边两个方法啊,一个叫insert费,一个叫update啊,这是我们创立一个类。
19:02
然后创建之后这个类别忘记啊,在类上边咱需要加个注解,就是你加个commentent,或者加个service,或者加个repery,表示让他交给spring进行管理啊,这个不要忘记啊,因为之前很多班上的同学经常忘记这个,就让他发现自动填充不好使,因为你这个类没有交给死明军管理啊,这注解不能少。然后接完之后咱看一下啊,在这个接口中两个方法,那两方法什么意思,给大家解释一下啊,首先第一个方法。来看这个词,它叫做insert feel。这词标注的很明显啊,Insert是不是添加有feel,是不是有填充类的意思,而这方法什么意思呢?我写一下啊,比如我们现在就是你使用MP,如果实现一个添加的操作,那这个方法就会执行。啊,这是一个,然后下面跟他一样,如果说你使用MP实现一个修改操作,那这个方法就会执行啊,这是一个特点,比如说MP,假如咱们上午写了个添加,当你这方法一执行,那自动填充的这个就会执行到啊,你里边可以设置,当你做修改的时候,那里边的这个方法会执行,然后里边我们可以写一些相关操作啊,这是它的两个方法。
20:25
那洗完之后,咱现在并没有完,因为你现在啊,要把这两个值是不是要设置它的时间,也不管你是创建时间也好,还是修改时间也好,咱需要设置,那怎么设置在里边啊,有一个设置的方法。这个方法比较简单,给大家写一下啊,就是你写个this,然后加上这个。大家看啊,这方法中很精细的标注出来,里边有三个参数啊,那我们先看一下这个方法,咱通过名字来看。因为它这个命名可以说写的特别的规范啊,大家看这名字啊,第一个单词set。
21:04
是不是设置啊,第二个叫field,是不是有属性那个意思,第三个叫VL,就是咱说的value啊值,第四个叫by name,根据名称咱连系起来翻译,根据名称是不是要设置你的属性值啊,这是一个方法,所以在里边我们有三个参数,我写一下啊,第一个参数。就是这个东西,你的属性名称就是它,比如我们写个可read time,这是第一个,然后第二个是你的属性值,比如咱要设置当前时间,我就new一个date啊,这是第二个。然后还有第三个,第三个呢,其实传的是这个对象叫might object。而这对象是什么呢?给大家解释一下啊,不是说各位之前是否听过一个词,叫做原数据对象。啊,原数据。啊,这个我大概解释一下啊,什么叫原数据?大家注意,比如说举一个最直接的例子啊,这是一张表,我这个表是不是有表名称,有表字段啊,包括你每条记录肯定都是在我表里边的字段中的值,这些叫做原数据啊,就是数据的数据,比如你的表名字,你的表中的字段,教育数据,它的底层通过一个叫原数据的方式做到啊,大家知道它的用法,就这么来做,你用set field v l by name,这是你的属性名称,就是咱要上这里边设置值,第二个是你的值,第三个是一个原生句,对象就是它。
22:36
这个啊是咱的第一个,而这个写完之后,因为大家看咱们想修改里边就是也要换个纸啊,那我们再给他写一下。代码跟他一样,只是说你换个属性而已。这个位置咱改成这个名字。Update。所以这个就做到了,也就是说呢,当我们这么做之后,你再用MP做添加,那咱们就会这两时间中就会有你的当天时间,而咱就不需要手动用赛的时候进去,他用MP的方式做到啊,这是第一个啊,然后洗完之后咱看它。
23:13
我邀各位啊,不要求你会举一反三,但是要求你会举一反一,你看啊,Insert添加,但要设置添加时间,修改时间,而我在修改的时候,你注意,假如我现在啊,比如说我这个时间,这是我们加的,当我第一次添加都有值,但是当我做修改的时候,大家应该能想清楚,添加时间不需要变了吧,咱是不是只需要变修改时间呀,比如说你第一次10:23加的数据,然后你再改的话,添加时间应该还是10:23,但是修改时间要换成咱们最新的时间。所以说咱们在这里边就把那个修改时间加上你最新这个值就可以了,我把这个输入过来啊,就是update time。这个啊,是咱们自己创建的这么一个类,然后在那里边我们就写上了这么一个基本的一个结构。
24:08
啊,我就啊把这个给大家直接咱就啊。结构图了。啊,就是这么一种形式啊。所以咱们啊,按照这个步骤,咱们把这个应该也给他做到了啊,这是我们MP里边的。就是实现自动填充这么一个基本步骤啊,它就是这么来做,所以咱们按照它把自动填充的过程就做到了,最后我再重复一遍啊,然后最后咱做个测试,它的做法就是第一步咱是在表里边加了两个字段,一个创建时间,一个修改时间,然后第二步在我们的这一类中两个属性,但是属性跟这个字段有一个这么一个命名方式,用驼峰式,就是大写这种方式。加完之后,咱再要进行自动填充的使用,上边加注解就是table field的,看你是添加还是修改,这是添加,这是添加和修改,然后都写完之后,最后咱需要自己写这么一个类,让类实现这个接口,然后在里边设置你要加那个值,比如说你添加啊,咱就当天时间修改加这个时间,这方法在MP做添加数执行,这一方法在MP做修改数执行。
25:22
啊,所以这样的话,按照这个过程,咱把这个代码我们就最终做到了,这就是MP怎么做自动填充啊,这是它里边的这么一种做法。我把这个啊先保存一下啊,然后再来测试。就是框架的一个使用吧,有框架的方式,当然咱也有自己的方式啊,当然我说明一点啊,就是自动填充啊,虽然是MP给咱们提供一种方式,但是在实际中这个东西具体用不用看你个人的喜好,因为有的人就可能觉得我自己set更方便,我不想用MP没有问题,但有同学可能觉得MP方便,这看你自己的实际的这种喜好啊,怎么用都是可以的,但是它是MP中一个功能,大家必须给他要会用。
26:10
啊,在这个啊,我要强调,也就是说有一点各位要明确,咱们在实际的开发中,比如我们做一件事情,做过功能,写段代码,代码怎么写没有说一定怎么去写,这很多手看你的喜好,比如说你这里边有同学说我就习惯set去写,那你把功能做到没有问题,有同学说我不要用side,我就觉得MP这种方式好写,那你可以这么写啊,但是不管怎么做,这些方式各位都应该会。啊,那这一个说完了啊,然后最后再来做个测试。首先第一个啊,还是这个代码,咱就用这个添加做操作,但是大家看啊,添加的时候呢,这时间我已经注释掉了,咱没有手动set,而我想用MP做到啊,那咱试一下啊,为了明显我把值给它改一下,因为咱有Lucy maybe。
27:00
换一个啊,就这个什么李雷啊,随便写个纸。然后写完之后,我把这个代码执行,因为大家看啊,之前加的数据应该没有时间啊,这是我之前加的,我先去掉啊,之前的没有时间,但是现在我们要加这个数据,咱就看自动填充能不能生效,如能生效时间应该可以加进去。啊,我们来试一下啊,咱直接看效果啊,我一刷新,大家仔细看最后这条记录。这个记录。你来看啊,前面都没有问题,主要看后面,2020年2月22号14:30。这时间是有了,一个是创建时间,一个修改时间,因为两个时间我们都给它加进去啊,所以这样的话自动填充我们就做到了啊,主要是这个特点啊,咱们没有set也可以加进去。那演示之后咱进一步演示,因为刚才做的是添加,咱们可能还有修改操作,而修改操作我想改的是修改时间,那咱们做个修改。
28:05
还是刚才这条记录,我把ID值给它复制过来,你咱刚才写过修改啊,这个值比如说值随便改一个啊。咱就看这个结果啊,我把这个代码执行这个做的是修改操作正确效果表里边应该会把那个修改时间改成当天时间,咱看他能不能改出来啊。我们来试一下啊。先做个执行。啊,这里边啊,执行没有报错,然后咱看时间啊,第一次都是14:30:25,咱刷新大家看时间创建没变,修改是变了,是不是变成了14:31:33。啊,所以这个效果咱做到了,这就是用MP做的这么一个自动填充功能啊,咱就是这个做法,所以这个过程要各位啊,能自己给他动手操作出来,而我们在一起的过程中,各位经常遇到问题,主要就是啊第一个就是这个。
29:06
我们自己建的这个类啊,注意它这个上面别忘记加上这么一个注解啊,这个很多同学比较容易忘。另外第二就是你建系类的时候,这个属性的命名规则要是写这种驼峰式啊,注解这些不要写错。啊,这个啊,咱就演示完成。
我来说两句