00:00
那么再往下走呢,那么咱们呀,来看一看,一共呢,有两个功能对吧?那么这两个功能呢,一个是先获取咱们这个日活数是吧?其实就是什么呀,就是我今天对吧,他新增的一个日活啊,一共有多少对吧?其实就我这个日活数对吧,今天新增活吧这个一共多少?那另外一个呢,是我们这个对吧,每个小时它的日活的一个分时统计对吧,分时统计,那么咱们现在要想实现这个功能呢?那么这里啊,大家注意啊,那么有不同的开发方式对吧?有不同的开发方式对吧?呃,那么其实呢,对这块呢,大家也可以去了解对吧算是什么,算是一些我们这个行话对吧?那如果说Java要出去找工作的话,那么一般呢,他会跟别人聊项目对吧?那聊项目的话,然后人家可能会问你,你们当时项目是水平开发呀,还是垂直开发?对吧,一个水平,一个呢是我们这个垂直对吧,这种我们这个开发方式,那么什么是水平,什么是垂直呢?对吧?那么这里大家注意啊,我这个项目可能呢,有很多个业务,对吧?那么如果说你这个人呢,对吧,再次开发的时候,对吧,从头对吧,包括咱们的页面发送请求过来,交给表志层处理,业务层处理,然后持久化移到数据库,那么如果这块呢,都是你来做,对吧,那这个就属于我们呀垂直的干方式,什么是水平呢?对吧?诶那么如果说我现在在咱们这个做项目的时候,有很多功能对吧,然后呢,它分了层了,有表示层,有业务层,然后呢,还有持久层,以及啊咱数据库的维护,那么张三只负责各个业务表示层的开发,对吧,拿什么订单呢?啊,什么咱们用户啊,什么物流啊,反正全是张三来做,李四呢只负责各种业务层的开发,那功能的实现,然后王五呢,只做过数据库打交在这一块,那这种方式属于什么呀?属于我们现在它的一个我们。
01:56
这个水平开发方式啊,属于水平开发方式,你觉得哪种更爽一点?
02:01
水平是吧,啊水平的话,那以后往大连那边走。对吧,就是大连它本身呢,如果要是做开发的话,对吧,那是不是好多对日外包啊,对,就是好多外包企业,而且都是什么都是对日的,对吧,你会经常发现说来你现在对吧,这个做什么项目不知道你干什么活对吧,你们这个整个项目完什么工作不知道对吧,你只负责其中这一块,就有可能做了好长时间,对吧?然后呢,你现在整个项目的大概的一个结构是啥样的都不知道的,你只负责其中这一片啊,整体的项目架构你是看不到的,就有点像什么,就是像工厂流水线一样,你就负责把螺丝挑出来,每天你这活就是这样啊,这个动作你比较熟是不是好了,那么接下来注意看同学们,那么咱们现在呢,在这里这对这个开发方式啊,这是开发方式,然后接下来,那么咱们现在呢,那这里,那我们采用哪种方式,那肯定我一个人是不是从前面到后面都都在干呀,对吧,那这里又有问题了,那么你们在开发的时候,是从前往后开发,还是从后往前开发呢?
03:07
从两端开从2A这种方式我觉得还是比较靠谱的,对吧,两端啊两端对吧?注意啊,什么叫从前往后,从从从从后往前对吧?那么咱们现在呢,一般情况下,如果说正常情况下应该是什么样的,如果说做开发的话,应该是这样对吧?就是我们现在的这个前端,或者说我们现在这个前端的部门,他帮助你啊把这个项目它的静态页面给做出来,对吧?比如说我现在本身是GP,但是呢,我这个在咱们业务里边的吧,哎,那我现在可能把这个这是GP,但是呢,在咱们这个做项目之前,前端的已经把attml对给你做好了,你把这attm页面拿过来,然后改成GP,对吧,第一个这是页面,然后页面呢,你得发送请求给谁,是不是给它controller controller是不是得交给它service service是不是得叫do来进行持久化,然后最后是不是咱数据库啊,对吧,是DB对吧?哎,那么这个时候呢,那你如果从前往后后开的么的话,就是这套流程对吧页面。
04:07
前端给你做好了,你不用管,然后但是呢,比如说点击页面某一个按钮了,那么这个时候那你要发送请求对吧,那你就得写,你看我要请求哪个CTRLCTRL是不是得写呀,然后CTRL需要调什么,Service这个东西你是不得写呀,然后service需要调do这个东西你得写呀,然后需要取什么对吧?这个连接数库对吧,那么数据库这块那你也要搞对吧,那这就什么从前往后对吧,然后还有一个什么呢?还有一个是从后往前对吧,就是我现在先把咱们数据库的结构对吧,创建好,然后呢,常见的数据库的操作,尤其是咱们一些对吧,这个管理系统增产改查这些东西都给提供好了,对吧,我现在写好,然后接下来可能有用到的业务,对吧,自然改查提供好,然后接下来在咱们这里边,诶,我发现你可能干什么呢?我需要有一个功能,这些功能是做什么什么的,然后我在这里写controller对吧,然后controller完事之后再拿页面利润对吧,去调它对吧,这是从头往前,但这个实际开发的时候一般是什么呀,对吧,两边啊从。
05:07
两边往中间,这是怎么回事,注意啊,这个东西一般如果说我要做开发的话,这块的代码。这份代码基本上不用你写,对就全是自动生成了,对甚至啊,甚至到有些公司封装好的话,Service代码对都不用你写,直接咱们有自己的框架,然后帮你自动生成,对吧,然后我现在如果要想尤其是什么,尤其是做咱们这个管理的系统,对说我想写一个对我擅长增删改查是不是对不起,没机会。对吧,你直接往把这个东西一创建,然后呢,你看默认记成谁默认记成比如说base,斯do base s,然后人家把这些东西对吧,都帮你生成好了,对简单的正产给达业务这代码你想写的没机会了,对所以说这个东西是不是默认天生已经有了,相当于后端这些东西有了,对然后现在我在开发的时候就什么呢?我就从页面这开始,然后发出去要给ctrler对吧,然后CTR进行处理,所以说呢,诶又是有两边往中间开发的意思,对吧,所以说这块呢,灵活一点,那么咱们现在怎么来做呢?咱们现在那我就采用我们现在啊这个灵活点的方式,比如说啊比如说那我现在呢,想完成什么功能,我想完成啊这个查询我们这个日活用数啊日活数对吧,那么如果查询日活数的话,那咱们肯定是不是得在service来提供一个功能,对吧,来把咱们日务数给查到了,对吧,所以说呢,我现在呀,先去把咱们这个service这一层呢,给它写一下啊,先把service给写一下,那么service本身有。
06:39
讲的东西一个是我们的接口,那么另外一个呢,设施纤位,所以说咱们现在呢,先在我们的接口里边,对吧,给它提供一个方法找到ES service,这个是吧?是什么呢?这个是我们这个,呃,叫日活呢,不太合适,我取这个名字叫ES是吧?那就是从或者操作我们的ES它的一个接口,对从ES接口,然后接下来在当前接口里边呢,写一个方法,这个方法呢,它完成的功能是查询啊,查询咱们某天它的一个日活数,日活数那么如果说查询某天的如合数的话,那么这里返回值是什么?方法名是它,然后呢,这个参数是什么。
07:27
对吧,大家我想查询某天的日活数,那么这个时候咱们现在想啊,比如说就今天吧,1024这一天对吧,然后呢,我这个日活的数量是多少,那你说我这个这个参数应该比较好定吧,是不是就日期啊对吧?来这定对吧,比如说这个就是我日期对吧,然后接下来那么返回值呢,以印呢,是不是应该是浪类型啊对吧,返回值,那么咱们现在呢,这是我们的一个浪类型啊,返回成浪型好了,那么如果说啊,你在这里提供一个我的接口,那么咱们现在是不是可以对个接口来做一个实现呀,对吧,来在这里呢,对吧,实现我们现在这个方法,注意啊同学们,那么我们现在啊,那这里对吧,那一定要把这个关系弄明白了对吧,前面那些代码呢,大家开发起来我都不担心对吧,但是这块代码呢,那么因为以前咱们有些同学没做过这块,对吧,我还是比较担心的,首先呢,大家想一想。
08:27
我现在我是不是写了一个service维的直线类啊,那么我这里是不是有个方法,那么以后你要想调这个方法的时候,你是不是得通过对象点的方式去调啊,谁来创建对象你自己吗?是不是咱们的spring来帮咱创建呀,Spring提供了一个功能叫什么来的?有印象呢?是不是叫做IOC,是不是有一个叫IOC容器啊,它来帮助我们的来创建这个IOC全称叫什么?还有印象吗?想控制反转,反转到底是什么?不就是对对象管理的权利吗?到原来是程序员自己来管,现在呢,咱们交给我们的IOC容器来管啊,叫控制反转对吧?哎,那么接下来既然或者反转,那你是告诉人家一声了,说我现在啊,我需要,那你帮我来管理,怎么告诉他呢?在这里我是不是可以加一个注解啊,对吧,那么咱们加什么注解呢?加一个rise CTR的,这是不是不太合适,因为这CTR的你标记的是谁,你是不是标记咱表示层的呀,对吧?那么咱们其实最早的时候呀,没有什么。
09:27
Control出ler没有,什么service没有啊,什么report没有分,它都叫什么呢?都叫咱们comp,就如果你想让我们这个spring来帮助你来创意对象的话,只要你在类上面标记一下comp的注解就行了,表示的是这个组件有我的容器来帮你管理,但是后来呢,我发现我分层了,那我为了让我现在呢这个层明这个意义啊,更明确一点,在咱们control的基础之上,它又细化了这么几个主径,如果说你是controller层,那么这个呢,叫做controller。
10:02
啊在这里啊,有一个叫control注解,如果业务层,那么这个呢叫service,如果是持久层的话,这个叫reposy,啊叫re reporting,这三个主体都是在咱们考官的基础上给它分出来的,对吧?那么我们现在呢,在control的上面,那又多了一个什么呀?Right controller,那么这块是什么呢?这块其实就是说如果是controlrler的话,那么每次呢,你如果不返回什么string的话,它就是做页面跳转,但如果rest controlr的话,它认为引不返回,对吧?那这个呢,是一个杰S格搜串,所以说我们一般呢,在发送请求的时候,尤其是什么,尤其是发送阿贾克斯请求的时候,异步请求的时候,那他都不是作用页面跳转,一般都是返回一个阶的数据,那所以说呢,我们一般用的是这个啊用是这个,这是我们表示层,那么如果说我现在呢,业务层的话,那就用我们这个service,然后如果说持有层的话呢,对在heri的时候呢,这个注解比较常用,但目前呢,买bed这个注解呢,也不怎么用了啊。
11:03
啊也不怎么用了,好了,那咱们现在是业务层,所以说呢,也在这里加了一个service,这个service注解表示什么?表示将咱们当前对象它的一个呃,创建对吧?创建交给谁呢?交给我们这个spring它的容器来进行管理,来进行我们这个管理对吧?哎,那么他管理完之后啊注意对吧,他帮助你呢,创建一个对这样的一个对象出来,啊创建的对象出来,然后接下来,那么咱们现在呢,那要想获取我日活怎么获取呢?同学们在这里,我现在啊想去统计我们的日活,怎么来统计,来打开我们现在的DV的这卡工具,那我想统计咱们今天的日活,那么如果想统计今天日活,咱们是不是可以直接去查询我们现在这今天对这个数据就可以啊来,那咱去查询大家看咱们这里是不是有一个total,对你是不是可以把这个东西我查到,对,但注意啊同学们这种。
12:03
写法呢,其实这里边它隐含了一个东西,隐含了什么呢?我们说直接加search,但这块其实是不是有一个叫match on,是不是相当于咱们先匹配所有对吧,那也就是说我现在呢,要想查询所有的话,那完全可以对吧,通过他这种方式对吧来进行查询,那这里呢,有一个total对吧,就是我们现在当天这一天的日活嘛,对这天的日活。对吧,好,那我现在呢,如果要想做的话,那其实呢,我完全可以通过这种对查询语句对吧来查一下,那么如果你要通过这种查询语句来查的话,大家想一想,我是不是要操作来search啊,操作来search时,你是不是得需要来search它的一个客户端对吧?这个客户端叫什么来着。Justl对吧,想想咱们现在在这里,我们是不是自己写欢工具类啊,在real time里边,咱们呢,现在自己曾经啊写为工具类,专门去操作我们这个elect式的,对吧?在咱们这里边对吧?那么你现在如果要是我们操作的话,首先干什么的,是不是得先去什么创建什么jazzland factory这工厂,然后进来你就再判断它是不是等于空,然后自己去什么设做一些设置啊,注意啊不啊,它的一个优势展现出来了,对吧?就咱们现在我这个使用spring boot进行开发对吧?那么如果使用spring不进行开发的话,我需要我们这jes client这些客户端,对吧,但是呢,那我能不能从这里直接拿呢?根本不可能,因为这是两个不同的项目。
13:29
对,你想一想你这个你这这这个东西是在real ta里边的,你这个是不是在publish这里边的两个不同的项目,所以说你不要想在这里有你的工具类,对吧?那么咱们现在如果想用的话怎么做呢?对吧?咱们本身spring BOO它已经帮助你把这个东西给集成进来了,如果没有集成的话,它怎么会有这个配置呢?对吧?你你要想用的话,你直接把这个配置给我就行。啊,你直接把它配就行,不光是它同学们再到这里,Just,对,那你看一看连接的超时时间,然后market thread,然后借了这个东西,你也可以什么read time out,像这些东西这个属性嘛,是不是就是我们在我们这个创建我们这个购端工厂的时候,给他指定的这个配置文件里边指定了一些属性了,对吧,也就说人家这个东西啊,已经帮你把这个集成了,那你集成的话,那么咱们现在如果你在配置文件中配置了我们这个啊,EES服务,那么这个时候它底层会自动的帮你把这对象给创建出来,所以说你要想用的话,你直接在这里注入一下就行了。
14:34
所以说我现在要干什么呢?要将我们的ES,它的一个客户端操作对象啊对象给注入到咱们这个service中,怎么注入,同学们有一个注解叫什么,是不是有一个叫all to where的注解啊,对吧?那么把谁拿过来呢?这里又叫justland,这里有justland需要你去创建吗?不需要人家帮你创建好了,你直接把它拿过来用就行,对吧?那么如果拿着用的话,那咱们现在这里我是不是要叫je glad,它里边的一个叫is to的方法呀,该怎么用还是怎么用,那咱们最后是不是要关闭啊,不需要容器来管理对吧?你直接用就行啊,你直接用就行,对,就是它的创建包括关闭这些东西都西交给咱中起去做就行,对吧?好,那这样的话,咱们现在呢,对吧,这个东西不需要你把重点任务啊放在这儿了,你只需要干什么,你只需要把这里边查询过去了就行。
15:37
让咱们来看一看呗,我现在要写谁呢?我其实写的是这块东西啊。我去写这个东西,而且咱们在写的时候啊,这里其实还可以做优化,同学们对吧?什么呢?在咱们这里边是不是有一个24-query啊对吧,这是什么?这个是不是咱们当前电视器的别名了,对吧?那我其实按别名查会更好一些啊,按别名啥会更好一些,对吧?其实得的效果是一样的对吧?好了,咱们现在呢,我要去查询这个数据啊,我现在呢去查这个数据,把这个呢这个语句拿过来,对吧?然后接下来,那么咱们现在怎么去查询呢?对吧?那你想一想,如果要查询的话,咱们这个里面是不是传action对吧?但是我现在是不是根据条件查的,根据条件查的话,那咱们应该封装对象叫什么?
16:31
Get是查询一条对吧,咱们现在根据条件查出可以查询多条,那是不是应该是search呀,所以说呢,这里应该是new一个search对吧,就一个search对吧?然后进来点我们的builder,注意啊,这个是什么?这个是咱们这Java代码,咱们原来写工具的那个SKY代码对吧?SKY代码对吧?那这里需要传一什么呢?传一个query进去对吧?那如果传1QUERY的话,咱们在这里我是不是可以定义一个我query啊对吧,然后接下来,那么你现在呢,对吧,把它做完之后,咱们可以去build一下,点2VR拿到了一个我们这个search,对search,然后把这个search把最新参数给传过来对吧?那么咱们现在呢,传的时候这个和我们这个的SC不太一样,SC本身,那它的异常机制和我们这Java是不是有一些变化呀,从使用上没有太大变化,但是从体系上是不是有变化,对吧?那么Java它的异常是什么样的,应该最上边是我们的。
17:31
SC再往下是不是有我们的error和exception,在咱们except下面是不是有我们什么编译是异常,有什么运行是异常啊,这个scan里边还有什么编译式异常,运是异异常异这这一说嘛都没有,所以说你看咱们在写程序的时候,好像没有什么异常处理,对吧?那么咱们现在这块呢,它就需要什么需要处理异常了,那我问大家现在这里边它抛出异常是什么类型异常?就咱们现在在调我们的方法的时候,大家看它里边抛出一个I与三异常对吧,然后你在编辑段的必须得对进行处理,这个异常是什么类型异常。
18:11
啊是什么意思啊,啊,你们你们你们在讲的时候不是叫什么运行时还是编译时是吧?你们叫受查不受查是吧?啊就是编译式运行和运异式异常,那我问你们这是编译式异常,运行式异常,编译式异常,因为你编译时不对的进行处理,咱就过不去呀,对吧?有同学说什么运行是异常,我问大家对吧,这个东西对吧?是啊,有同学刚才说什么受查异常,检查异常是吧?这个是检查异常还是非检查异常。难,其实我跟你说啊,这个东西呢,很多种说法,有的呢叫编译式异常,有的呢,对,这编译是异常,运是异常,这是一对,有的呢叫做咱们检查异常,对非检查异常,对吧,这一对儿,有的叫受查异常,然后非受查异常,这是一对,其实呢,他们都是从我们英文check和按check翻译过来的。
19:04
啊,其实都是从我们这个英文check这个翻译过来的,对吧?那么咱们现在呢,在我这里它其实是个编译异常,然后同时呢,也是一个检查异常,就如果说我现在呢,在到这里编辑期不对进行处理的话,那这个时过过不去的对吧?那处理异常两种方式,一个呢是继续向上抛出,另外一个是在这里做拆开来进行捕获吧,对,那咱们在这呢,就捕获一下,那捕获完成之后呢,那咱们一般在这里我可以去对吧,抛出一个异常对吧?那么如果抛出异常,异常它本质它的底层的一个本质原理是什么?其实我重新发生异常了,对吧?那么它的底层呢,其实是通过死肉关键字抛出了一个对应的异常类型对象。比如说我这里发生异常了,那其实呢,我完全可以这样run time对吧,Exception对吧,我抛出游行异常对吧?这什么呢?这个是对吧,这个查询ES失败啊,查ES失败对吧?当然你呢也可以去定义我们的异常,我觉得这个叫运行异常不太好,我可以自定义啊,我可以自定义,然后接下来那么咱们现在呢,在这里啊来执行,那么执行的话,这里,那你这个宽RY,你是不是可第一种方式,你可以把它给我拿过来往这一放,是不是就行了呀,但这种方式呢不好,那我希望什么,我希望咱们现在呢,通过我们这个代码的方式帮咱们生成我这个看字符串,那你想search,然后呢,想通过代码的方式生成它查询字符串。
20:31
通过什么方式,是不是有一个累啊,这类叫什么了呢?Search source builder是不是来在这里呢?你有一个search source啊,Source builder third builder对吧?咱们现在呢,去定一变量对吧?这个呢是我们这个source builder,然后接下来那么咱们这个source builder,那么他干什么呢?咱们是不是要query一下呀,那么你的query那察觉什么呢?咱们是不是要匹配所有啊,那就是我们这个match对吧到可对吧,匹配所有对吧?然后接下来那么咱们现在匹配所有的话,这里需不需要传输参数呢?它也不需要传输参数对吧?哎,直接匹配所有制就OK了,然后接下来那么这个query它这个字符串怎么生成呢?是不是可以通过source build.to string来生成一个咱们这个长字符串了,然后接下来咱把这query传过来,那么你上面还没完事呢,你是不是还得给我指定你查询的索引是什么呀,对吧,所以说咱们现在在这里对吧,除了咱build我们。
21:36
色项之前,那它应该添加什么索引嘛,对吧,I的index对吧,I index,那么咱们现在这个索引的名称对吧,我也把它对吧给它构建一下,比如说我定义变量index name等于什么呢?把这个东西拿过来对吧?把这个东西拿过来,这个是我现在要查询的索引对吧?但是注意同学们,你不应该这么写死这个日期对吧?你是不是应该动态怎拼接过来对吧?怎么动态拼接呢?注意同学们,我现在想在整个字串里边把这个东西给我替换成变量对吧?那么这个快速的方式是什么?来双引号中间加两个加号,然后把咱们现在这里一放啊把这一放这就可以了。
22:17
啊,如果说你外边是单引号的话,就单号中间加两个加号,然后加上它变量,这样就行,然后接下来把我们的index name往这一传,然后这块呢,就是关于我们现在它的一个色置对象,它的一个构建,那么构建完之后呢,还没完事呢,同学们还没完事呢,因为你是不是要查询所有啊,那么如果查询所有的话,那你想一想执行完之后呢,这里应该有一个我们这个查询结果,对吧?那么通过咱们的查询结果,它里边有一个叫get的total这样的方法来得到一个什么呀,来得到一个总数,对吧,但是你这个总数你是不是要给它返回作为方式返回去,返回去啊,所以说呢,你在这里得把这个东西给我返回去,如果把它返回去,你把它定在这就不太合适了,对吧,所以说呢,咱们现在在这里把它呢提出来,那么一开始呢,等于我这零对吧,然后接下来那么咱们通通啊,等于我们现在对这个查询记录,它呢去调get to透方法来把这个呢给他获取一下。
23:16
啊,来把这个获取一下。怎么样,这个代码同学们其实和咱们原来封装工具类的时候是不是差不多呀,对吧,行了,那这是关于我们现在这个获取我们这个日活总数啊,当天日活数是吧,它这个思维的方法实现,稍微休息一会儿啊,稍息一会。
我来说两句