00:01
好来,那么接下来呢,诶,我们就来这个啊,分析一下啊,我们这个启动啊,注入搜口的这个原理啊,那我们分成这么几步来做啊,我们把这个标个序号吧,啊,这是我们的第一个啊。好,这是我们第一个啊,这个前置知识呢,也写到这儿,然后第二个的话呢,我们就来分析一下,呃,因为我们现在呢,要去深入到它这个呃底层去看啊,所以说呢,它这个底层的东西呢,也特别特别多啊,我们就不可能很笼统的去啊找到某一个东西呢,来直接去分析它啊,那我们应该怎么去做呢?啊,我们用一个这个很通俗的话啊,就是我们要透过这个现象是吧。好,我们去看到这个本质的一些东西,所以说呢,呃,大家也可以学会这种方式啊,以后再去分析这个某一个技术的源代码的时候呢,我们先通过诶能看到的一些现象呢,再去慢慢的给他反推回去,诶我们也能把整个的这个流程呢,给他分析明白,好那么接下来呢,我们就来做这一件事情啊。
01:05
我们呃,就基于我们的这个删除操作来做吧,啊因为这个方法呢,相对来讲比较简单一点,怎么做呢,我们先在这儿呢,打个断点,打上断点以后呢,我们让代码呢,停到我们要运行的这行,诶代码地方。好,第八个启动一下,OK,那么断点就提到了,这为什么提到这呢?诶,那是因为我们要从这个地方来入手,呃,因为我们知道这个employee map呢,它就是一个接口啊,而我们实质上拿到了一个对象呢,诶是一个诶它的这个代理对象,那么这个代理对象呢,我们叫做诶mappro,那么这个东西呢,也是我们买be里面他做的一个这个代理啊,就是通过我们的JDK呢,来完成了一个动态代理的过程,好,所以说呢,大家注意啊,我们在这个地方给大家去写出来第一步啊。好,就是我们要什么呀,诶通过。哎,Employee map啊的本质啊,它是一个什么呀?哎,叫做什么map啊。
02:07
好,我把这个都给大家拷出来。好,它的本质呢,哎哟,这个特别大啊。好,它的本质呢,就是一个mappro,那么现在的话呢,我们就来看一下这个mappro啊,我们就呃con啊,我们去找到这个mappro好进来啊,那么进来以后呢,大家注意啊,在这个mappro里面呢,有一个特别好的东西啊,是谁呢?叫做诶so session,那为什么要去看到这个s session呢?哎,我们来看一下啊,因为在这个s session里面。好,我们来看到啊,它有一个HH呢,有一个叫做so session,因为在这个circle session里面呢,我们就能看到,诶我们获取circle session的一个circle session factory对象好说说呢来第二步我们看的是什么呀?诶在这个好接着往下写,就是在我们这个啊map process中啊有一个so session,而这个so session中呢,我们就能看到我们具体的一个好叫做social session factory。
03:18
好,那么我们把这个图呢,啊,也顺带的给大家这个拿出来啊,我们来看一下,好在这个地方。好,我们来展开啊。放大点。好在这个circle session里面的话呢,诶我们就能看到一个叫做诶session factory。好,这个我们再稍微大一点。好,稍等一下啊,我把我的截图工具打开。好,然后呢,我们再来试一下啊好,我们把这个打开。
04:04
好session,然后呢,我们就能看到这个session里面的啊,这个session factory。好,这就是我们的一个目的啊,我们把这个接出来。好。嗯。放到这个位置。哎,这个比较大啊,我们稍微缩小一点。啊呃,然后呃,我们再看到它以后呢,我们再接着看谁呢,大家注意呃,因为在这个so session factory里面呢,我们是保存了一个非常非常重要的一个对象啊。啊,什么对象呢?诶,就是我们的configuration啊,那么这个configuration对象呢,需要给大家去解释一下啊,它就是我们买贝的全局配置对象,然后呢啊,它包含了所有的一些配置信息啊,所以说我们来再来接着往后写,那我们的第三步了,应该是啊啊我们继续编号啊。
05:06
不是他。啊,应该是。好,继续编号啊好,那么第三步的话呢,就是我们能看到在这个so session啊factory中等,诶我们有一个什么对象啊,哎,有一个叫做configuration对象,好啊,那么为什么要去看到这个configuration对象呢?好,大家来听我说啊,啊,为什么看到这个configuration对象呢?因为在这个configuration对象里面,我们能看到非常非常重要的东西啊,我们来找一下configuration,在configuration里面呢,来,我们把它拉大一点,好,我们就能看到什么了呢,它里面有一个叫做。哎,Map statements,好,我们就能看到它了,那么在这个里面的话呢,大家来注意,它就是我们的每一个map statement,因为这个每一个map statement其实它就代表了我们。
06:11
每一条诶soql句那么简单来讲的话呢,就是你在搜Q映射文件里面去写过的每一条搜QL语句,将来呢,诶都会通过一个map的statement来去表示,所以说现在我们简单来看一下它里面的这个东西,其实呢,我们在base map里面定义好的每一个方法,它都会有对应的一条soql语句与之对应,好,我们来看一下,好找到我们的map statements。哎,在哪儿呀?好在这个位置,然后我们来展开,展开以后呢,啊,那这个东西是特别多的啊,啊,我们随便去挑出其中其中的几个来看一下啊,我们来找一下啊,这个不是OK,那我们来看一下,这就是我们的employee map,你看它里面的话有一个select by ID哦,这个家伙呢,肯定是来自于我们的base map里面的,那么它就会对应一个map的statement对象。
07:04
好稍啊,我们再来试一下。好,我们还是来找到啊啊。好,我们找到它,然后呢,我们再往下翻一下啊,我们找到刚刚的这个方法,诶比如就是他吧,那么它就是一个诶map statement对象,而这个map statement对象你看啊,它对应的是一个select by ID这个方法,那么我们在执行这个方法的时候,它的搜语句呢,诶其实就已经在我们的这个map statement里面,诶把它已经把它诶构造好了,我们来看一下这里面有一个。So source,而在我们这个so source里面呢,我们就能看到一个诶sol语句,那么大家来看一下这个sol语句,其实就是我们在执行select by ID的时候,我们所执行的那条ology,好,那么其实看到这个地方的时候呢,好大家需要注意了啊,我们看到这个地方的时候呢,大家就应该能明白了,原来买贝plus呢,它在启动的时候呢,诶就已经把我们啊贝斯map里面啊,把我们贝斯map里面的每一个方法,它它将来所要执行的搜Q语句呢,都已经帮我们构造好了,并且呢,都帮我们诶保存到了我们configuration里面的map的statement里面,好,这是我们现在能分析到的。
08:30
好,我们来写一下,我们要看到它里面这个configuration,因为什么呢?因为在这个configuration里面呢,诶我们有一个什么东西呢?好,有一个非常重要的叫做。好,Map statement,好,那么给大家去说一下,每一个map statement啊,都代表啊,都表示哎,我们这个啊都表示什么呀,好表示啊,就是我们这个啊map接口中。
09:09
Map接口中的一个方法,哎与什么呀,与我们的这个呃,Map映射文件啊好,与我们这个map映射文件啊中的啊一个这个这个circle口啊一个circle好,所以说呢,大家注意就是我们在这个map statement里面呢,其实就已经把我们啊这个梳理好了,你接口里面的哪个方法诶要执行哪一条S语句,那么这个是我们暂时能看得到的一些东西。好啊,那么我们能看得到这些以后呢,呃,我们现在呢,能明白的就是什么呢?诶my bet plus好,它在启动啊就会啊,分析就会什么呀,挨个啊去分析我们这个啊某某某啊map哎中的这个方法好,并且呢。
10:06
诶将什么呀,对应的这个SQL语句啊,帮我们处理好好然后呢啊保存到我们的好configuration对象中档map。Statements里面。好中好,那么其实我们后续啊,再去调用每一个方法的时候呢,诶,它就会再回到我们这个configuration里面,找到我们对应的map的statement,然后根据你调用的这个方法的名字呢,诶再去找找到对应的soql语句再去执行,好那么我们分析到这以后呢,其实我们的现象哎,我们就分析完了,接下来我们看一下它的这个本质到底是什么,好,那么这个本质的话呢,大家注意了啊,我们需要诶来到我们的cons里面来去看啊,因为这个地方我断点一直在停掉啊,它就有一些这样的信息,我们就啊先让这个断点的停掉。
11:09
好,停掉以后呢,我们再来执行一下。好,断点停到我们再来找到我们这个方法呢,诶再去做一个debug执行。好,那我们在执行的时候呢,我们需要来分析一下这个启动信息啊,其中啊,我们看到这个地方,它有一个叫做我要去实例化你的病啊,就是我们这个employee map,然后呢,在接下来我们就能看到它都调用了一个ADD map的statement,就是添加一个map的statement,然后呢,对应的呢,就是我们隐employ map里面的每一个方法,那么这些方法的话,很明显就是来自于我们的base map里面的,好,我们把这个呢,也给大家这个截一个图出来啊,到时候大家可以呢,诶自己去分析分析好后续的呢,我就不截了啊,我们就大概的去截几个就可以了,好把它呢,诶我们也放到这个地方。
12:07
好,那么我们的本质啊。好,我们来把它粘贴到这个地方。行好,那么我们呃,看到这个的目的是什么呢?那就是因为它在启动的时候呢,就会把每一个方法呢,诶都构造成一个map statement,那么其实我们接下来看它源码的地方呢,诶我们就已经找到了诶入手的地方,那么这个map statement呢,我们就诶从它这个地方来入手,就能看得到它每一个方法的一个具体处理好,那么接下来呢,我们就来深入到它这个底层源码呢,看它的这个本质好。
我来说两句