00:01
好,接下来的话呢,我们先来给大家去说上一个诶分页插件,好,那么这个插件的话呢,应该也是大家这个期盼很久的一个插件了啊好,因为我们之前啊,虽然说也有这个分页操作啊,但是呢,那些分页操作的话呢,都是基于啊内存的一种分页啊,也就是说我们所谓的这个啊假分页是吧?啊但是我们使用了这个分页插件以后呢,诶,我们就可以真正的实现一个诶物理分页啊,就是我们所谓的这个真分页。行啊,那么这个插件的话呢,它叫这个名字啊,我们可以啊,诶先来到这个里面呢,再来稍微给大家去解析一下啊,我们这个插件的一个啊相关的东西。好,我们来ctrl shift t啊,我们找到这个插件。好,就是这个类点进来啊,进来以后呢,我们来看一下啊,首先呢,它很明显是实现了我们这个cept啊这个接口的,这个是毋庸置疑的啊,那那么实现了这个接口以后呢啊,在这个接口里面的话呢,我们就有这么几个方法啊,其实我们最主要关心的呢,就是这两个方法了啊,那我们接下来看一下它是怎么做的。
01:05
呃,这个intercept方法的话呢,我们暂时呢,就先不带着大家挨个去看了啊,一会我们在呃具体测试的时候呢,我们再来简单的去解读一下这个代码的执行啊啊然后我们主要看的是一个plugin方法,好大家来看一下,呃,这个plugin方法呢,刚刚我们已经说过了啊,他就是来帮我们去啊为这个四大对象呢,去生成这个代理对象的,好我们看一下他是怎么做的。呃,我们把这个四大对象传进来以后呢。诶,它调用一个pluginper啊,那这个应该是做一个包装的意思是吧,我们来垫进来。呃,进来以后呢,我们就能看到你传进来的这个四大对象呢,然后呢,它会通过我们诶JDK的这种动态代理啊,JDK的动态代理就是我们自带的pro,它里面的一个new process instance,然后呢,传上诶你具体的这个类加载器,传上你所有的接口,诶再传上了你这个相关的一些。
02:02
哎,数据啊,然后呢,把这些东西传进去以后呢,诶,他就会帮我们返回一个具体的代理对象,那么拿到这个代理对象以后呢,再把这个返回到我们当前的这个,哎拉in啊这个方法的这个位置,所以说呢,对于我们这个拉in方法来讲的话,就是四大对象传递来,然后呢,给他返回一个具体的一个代理对象,那么将来我们再通过这四大对象诶进行一些这个方法调用的时候呢,诶,他就会通过相当于是通过我们的代理对象来去做一些事啊,那么这个代理对象呢,将来再去执行的时候,他自然而然的诶就会诶来到我们这个intercept这个方法,然后呢,去执行我们插件,诶编写好的一些功能了,好啊,这是我们这个相关的两个方法啊,需要给大家这个简单的解释一下。另外一个呢,你插件编辑好以后呢,啊,还不行啊,我们还得对这个插件呢,进行一个签名的操作好啊,那么签名的时候呢,大家注意我们需要指定这么几个东西啊,首先第一个最重要的就是你需要指定一下当前的你这个插件是需要拦截哪些对象啊,那总共呢,就这四大对象啊,你需要指定一下拦截这四大对象里面的哪几个对象,那比如说这个位置它指定的是拦截statement handle了。
03:24
好啊,除了这个指定对象之外的话呢,还是要指定你要拦截这个对象里面的哪个方法,哎,我们拦截的是method里面的prepare这个方法,好,指定了方法以后呢,我们还需要去指定我这个方法呢,诶有哪几个参数啊,我们可以来看一下,比如说来到我们这个STEM handle里面,我们能看到一个prepare的方法,OK,就在这个位置,然后呢,我们能看到的是在这个方法里面呢,有一个connection类型的参数,有一个in提类型的参数,所以说呢,我们能看到。诶,在这个位置他要去拦截这个方法,然后呢,这个方法的两个参数类型呢,我们也需要指定到这儿,那么呃,对于我们自己去写一个插件的话呢,也是这样的啊,你需要实现这个cept这个接口,然后呢去编写它里面的几个抽象方法,最后呢,再进行这个插件的一个签名。
04:17
好,把这些都做完以后呢,诶,其实我们的一个插件呢,也就做好了,好,那么暂时的话呢,主要是给大家去讲这个分页插件的一个诶用法啊,所以说呢,多的呢,我们就不再啊带着大家去分析了啊还是那句话,如果说对这个插件不了解的同学啊,或者说不熟悉的同学,那么建议你呢,回头再去把这个买里面的插件机制呢,好好的去学一学,然后呢,再回头再来看我们的这些插件。好,接下来的话我们就来具体说一下,诶,这个插件应该怎么去使用啊。嗯,好,那我们还是重新来拷贝一个工程出来,我们叫做买贝斯零四。好啊,拷贝出来以后呢,啊,我们直接。
05:03
好找到我们的测试类啊,因为这个是我们刚刚这个。好之前呢,我们这个代码生成器啊,我们把这份代码呢,给它拿掉。好,这个我们是不需要的啊,一会的话呢,诶,我们来去写一些这个基本的测试方法啊呃,然后呃,你这个插件的话,如果想要使用的话呢,我们需要进行一个注册啊,那么注册的话呢,大家注意我们有两种方式啊呃,第一种方式呢,就是在我们的诶买be的这个配置文件里面的,诶我们是可以通过一个叫做啊plugin啊这个标签,然后在这个标签里面呢,我们可以通过一个plugin,然后呢,在这个ceptor里面呢,就去指定上你这个插件的一个全类名就行了,比如说现在我们使用的这个插件呢,诶叫做它我们就可以把这个全类名呢。诶给它拷贝一下,然后呢,放到这个位置。好,这样的话呢,我们就可以把这个插件呢,给它注册进来了,那么这是一种方式,呃,那么因为我们现在的配置呢,基本上都在我们这个SPA的配置文件里面写的啊,所以说呢,这个位置的话呢,诶,我就先暂时把它拿掉啊,只是告诉大家呢,我们可以通过这种方式来进行配置啊呃,那么具体配的话呢,我还是希望把它拿到我们这个po里面,呃,那么在这个配置里面的话呢,有一个啊,Point整合MY的配置啊,就是我们用到了这个my so session factor并在这个里面的话呢,我们可以哎给它里面的一个叫做plugins来去注入职,呃,当然啊,这个plugins我们来看一下。
06:35
诶,它是一个数组类型的,那么在我们这个呃,Spring中的话呢,如果说你要对这个数组啊进行值得注入的话呢,诶我们是可以使用这个list啊,通过这个list标签的来去给它进行注入啊,那么在这里面的话呢,我们就可以啊,诶来去注册我们的诶每一个插件,比如说注册我们的好分页插件,那么怎么注册呢?诶这个地方的话,我们就直接使用一个基本的并就可以了啊给上一个class,那么这个class的话呢,还是我们刚刚拷贝的这个全类名好把它拿过来。
07:09
好,下面的这个不要。OK,那么这样的话呢,我们就把这个插件呢。诶这样的话呢,我们就把这个插件呢,就给它,诶注册好了,好这个地方解释一下,这是我们这个插件注册啊。好,那么这个插件注册好以后呢,诶,接下来我们就可以啊做一个测试了啊好,我们直接来到我们这个测试方法中啊,啊那么这个位置的话呢,我们还得去啊做一些基本的操作啊,我们需要诶拿到我们的这个容器对象哈。好,我们再把这个写一下。好,Class pass。X啊,好,把我们这个配置文件就叫做application contact查妙写到这啊,然后呢,我们还需要拿到我们这个employee啊好啊。
08:00
好,等于Ctx.B啊,然后呢,我们写成一个employee map好,然后后面的话就是一个employee啊map class,好把它写到这。然后接下来的话呢,我们就来测试一下我们这个插件啊好test我们这个啊配置是吧插件。好,测试我们的分页插件啊。OK,呃,那么这个我们怎么测试呢?呃,那我们就直接使用上一个,呃,基本的查询吧,啊,比如说我们有一个啊查这个。啊,Employee map里面的话呢,我们有一个叫做select page。啊,大家应该都还记得啊呃,我们之前在去使用这个方法的时候呢,大家应该还知道哈,就是虽然说有分页的效果,但是呢,他没有真正的帮我们进行分页,而是在内存里面帮我们做的分页啊,现在的话呢,我们再放心大胆的去使用它就可以了啊,又一个配置。
09:12
好啊,New配置的时候呢,我们需要传上这个啊页码啊,嗯,好像我们这个数据也不是很多是吧。啊,那我们就。看第一页呗,对吧,看第一页,然后呢,每页显示一条呗,我们主要呢,还是看这个将来的那个搜狗语句啊好后面这个条件的话呢,我们暂时就不需要了,好让他去帮我们这个根据分页呢做一个查询,好这个位置的话呢,帮我们返回的就是一个集合了,我们把它接收回来。然后接下来的话呢,我们再来输出一下,把这个EPS呢,诶我们把它写到这。OK,好,接下来的话呢,我们就来看一看啊,我们再去执行的时候,有没有这个真正的分页的效果好来运行一下。
10:05
好,他出了一个问题啊,我们来看一下出了一个什么问题,呃,说我创建不了这个employee member啊,为什么创建不了呢。呃,因为我们解析不了这个org买啊login catch啊,这是因为我们这个有了一个啊login catch啊,这是因为它这个帮我们生成的时候呢,啊,这个位置大家应该还记得啊,因为我们拷贝的是这个代码生成器里面的啊,所以说呢啊,在我们的这个employee map的查ma里面啊,我们来找一找。好,因为在这个里面的话,他帮我们开启了这个二级缓存了,是吧,哎,这个家伙我们不要啊,我们把它拿掉。好,那到以后呢,我们重新来测试一下。好,现在的话呢,就没有任何问题了,然后呢,我们能看到啊,他帮我们查回来了,哎,一条数据。好呃,那么这个应该是它这个构造器啊,它这个有有点这个它的这个突斯string方法有点问题了哈,但着看着不是很舒服,我们来看一看哈,啊,这也是自动生成的是吧?啊确实是这样子的,你看到没有好吧?啊,这个我们就啊无所谓了啊啊然后呢,现在我们主要看的是什么呢?来你查到了一条数据,我们主要看的是我们的so语句啊,大家注意了啊,现在我们再来看我们的soq语句上面呢,诶就出现了我们特别诶希望它出现的一个limit子句了,那么既然出现了这个limit子句,那很明显我们现在确实是使用到了我们的这个诶分页插件了。
11:40
好,那么接下来的话呢,我们再来具体看一下他到底是,诶怎么啊,把我们这个分页操作呢,给他架上去的,好,那么我们能想到的是他将来肯定会来到我们这个分页插件里面去帮我们执行这个方法了,那我们就来分析分析他这个方法,诶是怎么去执行的,好,接下来呢。
12:02
好,我们,诶来到我们这个debug里面,嗯,好,这个我们不需要啊,然后呢,我们直接让他执行,让他听到我们这个断点的这个位置。好选中,然后呢,第八个执行。OK,那么代码呢,就听到了这个位置了,我们来分析一下啊,他首先呢啊,先通过我们这个plug us啊,拿到了一个叫做handle对象啊,就是我们当前要拦截的这个对象啊handler好来代码往下走一下啊,拿到以后呢,他又拿到一个matter object啊这个家伙的话是我们买白这次里面比较好用的一个对象了啊,它里面的话我们基本上可以拿到诶任何你想要拿到这个数据啊,好,然后呢。再来往下走好,首先呢,诶,他需要去判断一下这个是不是一个查询操作啊,那么就得拿到我们的map statement,因为在这个map的statement里面呢,它就有一个so command type啊,所以说我们先拿到它,拿到以后呢,我们一判断,诶发现。
13:05
是不是一个select的操作呢,我们来看啊,它获取到的这个get so command,我们来看一下。好,这里面的话肯定有一个so command。好,它就是select,然后这地方判断了它不是select,那么说是这个是不值钱的,那么接下来的话呢,诶,他要从这个数据里面来拿到我们这个啊好,那么其实这个robots对象的话,大家注意,其实这个robots对象就是我们当前,诶在测试的时候呢,我们又出来了这个配置对象,因为我们知道这个配置对象的话呢,它继承了我们这个啊pages,然后呢,他又帮我们继承了这个肉棒子,好,所以说呢,这个位置我们应该是能对应的上的。然后他分析了一下有没有这个对象啊啊,那肯定是有的,所以说呢,我们是需要分页的,而这个地方判断的是不需要分页,所以说我们直接过就行了啊好,那么接下来的话呢,就直接来到了这儿了,来到这以后呢,拿到我们这个棒的搜狗,好再来往下走,我们来看一下这个棒的搜狗。
14:02
呃,办了搜口里面的话呢,我们大概的去看一眼就可以了啊,它有一些我们基本的信息啊,主要的话呢,就是有一个诶搜口语句,注意啊,现在拿到了这个搜口语句呢,我们来看看他还是没有分页信息的这个搜口语句。看到了吧,它是没有任何分页信息的啊,然后接下来呢,从这个里面呢,把我们这个搜口语句呢,给它取出来,好,就是我们刚刚看到的这条搜口语句,然后在接下来呢。诶,他去做一些什么数据库的这个类型啊,或去让你这个数据库的类型,因为他要去看一下我要怎么帮你进行分页了,如果你是买搜狗L的话呢,那我直接去加这个limit子句啊就可以了,好这个我们就不再具体看了,然后再来往下走,说看一下它是不是属于我们这个penion的啊,就是我们刚刚的这个入棒子,好,我们再来往下走好。然后再来走。好,再走,然后呢,我们一直走吧,我们就直接啊,再来看一下最后的结果就可以了啊好。
15:02
好,稍等一下啊,好,再来走,OK,他就直接来到这了,来到这以后呢,我们再来往下走一步,我们来看这个Bo的so口,他帮我们构建好了这个so口呢,其实你看一下还是我们之前的啊,也就相当于在这个地方呢,好像没有发生什么事啊,然后再来往下走啊,大家注意往下走,好,我们来看这个orange so,注意。我们就能看到,诶这个limit已经加上了,那就说明它是从这个位置呢,把我们原本的这个sol语句呢给它传进去啊,就是这个帮的so后给它传进去,又把我们的分页对象呢给它传进去,然后呢,把我们的分页信息呢就给它设置到这个位置了,好然后呢,接下来呢,诶else那肯定就不执行了,再来往下走,下面的这个操作大家必须要注意了啊,他帮我们把这个原始数据里面的一些。啊说的这个内存分页什么的呢,给我们都经营掉了啊因为什么呀,人家也说了啊内存分页呢,诶它是把所有的结果呢查出来,在这个内存里面呢,啊把所有的结果都查出来,然后呢,进行一些这个数据的挑选的,所以说呢,对于这个数据量很大的情况下,你要这么做的话,诶那是很消耗内存的,所以说呢,这个还是很吓人的,好,而且如果说你这个频繁去操作的话呢,可能数据呢还不会太准啊好,所以说这个的话,它会就帮我们禁用掉了,那么最后的话呢,我们把这个SQL语句,诶加上我们的分页信息以后呢,诶最后再去执行一个英文。
16:28
那么这个呢,才最终执行到我们这个真正的那个四大对象的方法里面了,好所以说后续的操作呢,诶我们就不用再去看了,好我们直接过。好,最后的结果的话,我们就能看到他确实是,诶执行的就是我们的这一条so口。好,那么这就是我们要给大家去分享的一个,诶分页插件啊,它的一个用法其实特别简单,我们只需要把插件注册好,然后呢,诶在我们这个测试方法里面,我们就直接诶使用我们这个配置对象呢啊就可以了,好。
我来说两句