00:00
好,我们继续来编写报表管理模块,当然报表管理模块其实比统计管理还要更简单,对吧?因为我们实现的这两个小功能呢,是呃,比如说在这里边我们填写一个建表语句,那么它就会在click的default数据库里边呢,呃,来创建一个呃,就是说。Click house的这样的一张表对吧?呃,那么在买CQ报表管理的里边的话呢,我们就是呃在填这个框里边对吧,填写一个CQ语句的话呢,那么我们点击提交呢,就会在买CQ的呃数据库里边对吧?某一个数据库里边呢,呃给他新建一张表,当然这个功能呢,它呃也是可以开发的,比较复杂的,也就是说呃你这里边你。你可以开发一个功能,对吧?呃不是只能输入建表语句,比方说你在这边你可以开发一个功能呢,可以输入查询语句,然后呢,在下面呢,使用表格的方式呢,把查询语句的结果呢给它,呃可视化出来对吧?那这就演变成了一个呃类似于my CQ cat这样的一些对吧,这样的一些,呃就是说数据库的可视化工具对吧?呃你要是开发特别复杂的话呢,呃其实就变成了一个类似于na cat这样的,呃数据库的管理工具对吧?数据库的管理工具,那这个的话呢。
01:29
呃,其实他可以开发到这个复杂度对吧?当然在这儿的话呢,其实我们没有那么大的必要说是呃在一个中台项目里边,然后去学习如何开发一个买CQ的客户端啊,或者说可house的呃客户端,对吧?但是呃实际上它是完全可以写的出来的,对吧?就是开发一个网页客户端,我们这里边只实现两个简单的功能,那一个就是呃在网页这里呢,呃就是说编写买CQ的建表语句,在MYCQL数据库里面建表,以及编写click house的建表语句,在click house里边呢,呃去呃去建表对吧?去建表好OK,当然我们接下来的话,我们还是来编写后端的API,我们还是来编写后端的API,呃,那首先的话呢,我们还是要创建一个并这样的一个类,对吧?呃,我们先创建一个软件包吧,好,然后接下来的话呢,我们点击这个软件包,然后呢,我们创建一个叫做呃,Report这样的一个软件包。
02:29
然后我们还是把这些文件夹都创建好,比方说第一个的话呢,是呃B对吧,那这个肯定是要创建好的,那么第二个的话呢,我们新建一个软件包呢,是report点。呃,Service对吧,服务,然后呢,我们再把这个controller,也就控制器呢给它创建好,好,然后接下来的话呢,我们首先来写一个病,当然这个病里边的话呢,它就只有一个Java类,呃,那么这个Java类呢,叫做CQ query,呃,用来将前端传过来的,呃,CQ语句呢,把它序列化成一个CQ query这样的一个,呃,就是说一个病对吧的实例,然后private,然后string CQ,然后当然在这的话呢,你就可以来写一下它的get center,对吧,我们生成呃这一个字段的get set,好,那这样的话呢,我们的Java并类呢,就已经写完了,对吧?那这个是用来将请求的参数对吧,或者说将请求体呢实例化成一个CQ。
03:42
Query对象对吧?当然这个请求题里边,呃,也就是说我们的POS请求的请求题里边呢,它包含了一个呃,你的这样的一个鉴表语句,对吧?我们现在有了这个并类以后呢,我们接下来的话呢,呃,我们就可以来编写。
04:01
Service对吧,那这个service的话呢,我们新建一个Java类,那么叫做create table service。那么这个服务的话呢。我们包含两个,一个是click house的建表语句,对吧,执行click house建表语句,还有一个呢,就是MYCQ的建表语句,对不对?OK,那么在这儿的话呢,我们接下来我们就可以开始写了,当然它这个呃,肯定是静态方法对吧?肯定是静态方法,我们把这个服务呢,都给它写成静态方法,然后它返回的呢是string。对吧,返回就是string,然后呢,Create click house string,然后这个呢,是我们的呃,CQ字符串,然后接下来的话呢,我们就来看一下CQ exception以及class not found exception对吧,然后呢,1.print,然后在这的话呢,我们可以最后return一个什么呢?Return一个create table error对吧,Create table error这样的一个错误。呃,然后在这的话呢,我们就来创建连接,对吧,当然你可以把这个连接呀,类似于用户密码,密码呢都呃,就是说归纳到一个或者说整理到一个database这样的一个类里边,对吧?当然实际上也可以,因为我们这个功能比较简单,所以说我们这里边也可以直接把它写死对吧,Drive manager的get connection,呃,然后呢。
05:36
呃,当然它的连接呢,是JDBC冒号click host冒号双斜杠,Local host冒号8123,写个default对吧?问号use s SL等于false,哎,这样的话呢,呃,我们就已经写好了,对吧?呃,C的GDBC连接,当然你在这儿的话呢,你还可以,呃,比如说把这个GDBC的驱动类,对吧,也可以把它拷贝过来对吧,我们也可以直接写到这里,也是没有问题的。好,然后在这里边的话呢,我们点击create table service。
06:17
然后在这儿的话呢,我们是一个class.four name,对吧?那这样的话就指定了我们的驱动类呢,是clickhouse的,呃,这样的一个驱动类,然后呢,呃,当然就是说我接收的参数呢,是一个建表语句,所以说我直接执行它就可以了,对吧?那就是where create table statement等于一个connection.prepare statement,然后直接执行CQ就可以了,Create table statement.execute对吧?呃,当然呢,你不要忘记把这个语句给它关闭掉,然后不要忘记把这个connection给它关闭,然后return一个,比方说create table success,哎。
07:05
那这样的话呢,实际上呃,非常简单的一个功能呢,我们就实现了,呃在数据库里边,呃,新建一张表的这样的一个功能,对吧?接下来的话呢,我们直接实际上买CQ也跟这个类似,对吧?呃,当然你也可以呃包括像have呀呀等等等等,其实你都可以呃创建这样的服务,好,那这的话呢,就是。呃。我们应该是create table吧,然后下面这个的话呢,是create my对吧,My CQ table,呃。其实我们这个用户管理模块呢,它就是一个比较小型的呃数据库客户端对吧?当然你可以用网页的方式来开发这个数据库客户端,呃你也可以使用类似于像Java swing对吧这样的什么GUI库来开发这样的呃数据库客户端对吧?呃可能大家都觉得jaw它这个GUI库呢,有一点呃落后对吧,就是说呃实际上他确实有一点过时,但是我们可以看到这个idea这么复杂的应用,呃都可以使用Java Java swing,呃JAY这样的库呢,来把它开发出来对吧,其实也可以把它开发出来,好呃,然后呢,我们在这儿的话呢,我们把这个连接你肯定是要改一下的,对吧?那么它是JDBC冒号,买CQ冒号双斜杠,Local host冒号3306斜杠,我们就在g report。
08:39
这张表里边来创建新的表吧,然后呢。Use s SL等于false对吧?我们禁掉这个SSL协议,然后呢,用户名root,密码root对吧?呃,当然这个驱动类的话呢,我们也需要修改一下对吧?我们这个驱动类的话呢,是com点买Cq.CG.jdbc.driver对吧?那么在这的话呢,我就可以直接把这个呢给它替换掉。
09:09
好,那这样的话呢,我们的两个创建表的服务呢,就已经写好了,对吧,然后接下来的话呢,我们就可以开始写controller了,对吧,就是写我们的控制器,所以说你可以看到这个模块呢,开发起来相对来说会呃,非常简单,呃,那么实际上的话呢,呃,我们。这个中台项目它的主要的难点在于最后两个模块,一个是定时任务的调度器,那么还有一个呢,就是我们的呃,血缘关系的分析对吧,以及图数据库的使用,实际上这两个模块呢,是呃比较复杂的模块,其实呃我们之前开发这些代码呢,大家基本上都可以看得出来,就是对数据库的一个简单的增删查改,对吧?它并没有说涉及到其他的一些技术,好我们这个controller呢,叫做create table controller对吧?呃,当然你说这个。
10:09
类的话呢,呃,或者说这个控制器的话呢,它肯定是一个rest controller,对吧,然后呢,Request mapping,然后我们的URL呢,我们给它设置一个就是一个斜杠report吧,呃,以它为开头的,然后呢,我们在这的话呢,我们是一个POS的请求,对吧?那么post请求的话呢,比方说第一个呢,是create click house table,对吧,这个是post请求,然后呢,Public,我们的返回值呢,是一个string。类型的result,然后呢是create click house table,对吧?那么我们的请求体request body,我们需要将它反序列化成一个CQ query,然后CQ query,对吧?然后在这的话呢,我们可以比方说你可以给它抛出一个议程,当然呃,就是不抛也是可以的,对吧,我们这儿我们就不抛异常了,好。
11:08
呃,然后接下来的话呢,我们在这边我们就可以return一个create。Service对吧,然后调用里边的什么服务呢?Create,呃。当然就是说在这的话呢,我们应该是return一个result.of200对吧,200,然后呢,Success,然后create table service.create呃,Table,然后呢,是一个CQ query.get CQ,哎,这样就可以了,对吧?当然你说是买CQ的话呢,那它其实是一样的对吧?呃,我们直接复制过来,然后呢,在这的话呢,我们把这个URL给他改一下,比如说这的话呢,是一个MYCQL推对吧?那么下面的话呢,也是一个呃,My SQL table对吧。
12:05
然后呢,在这的话呢,我们创建的这个服务的话呢,也是一个mysq table,好,那这样的话呢,呃,我们的这个API呢,就已经写完了,对吧?你可以看到这个模块呢,非常的简单,呃,所有的代码呢,加起来也没有多少行对吧,也没有多少行,然后我们呢,重启这个代码对吧?呃,当然我在这儿呢,我建表的时候呢,你可以看到它是在g ma_report这张表里面,呃,建的对吧?呃,当然我们在这儿的话呢,我们写的是我们创建表在ma数据库里面,呃,所以说呢,我们要修改一下这个前端代码对不对?呃,我们首先找到它的组件所在的地方,是views下面的report下面的custom my query对吧?那你在这的话,你就可以改一下这个,呃,P标签里面的就是我们改成gma report数据库对吧,当然你一保存的话呢,它前端服务自动重启,你就可以看到,呃,这个似乎它并没有变掉啊,我们。
13:05
诶,你可以看到我们刷新一下呢,它就呃就变了,呃,然后呢,我们在这边,我们再来看一下它的一些请求,对吧,然后补充一些之前的一些知识,呃,比方说我在这里边。对吧,你可以看到我每次访问一个请求的时候呢,都会请求后端的user info这样的一个呃,API,那么user info呢,它返回的是这个用户他可以访问的权限的,或者说路径的名称,对吧?那么前端是怎么根据这些大全大写的名字来给你渲染出这个左侧的菜单来呢?呃,我们就要看一下前端代码里边的,呃,有一个叫做什么呢?叫做router。对吧,那这个route呢,实际上是呃,汇总了我们前端所有组件,它的路由的一个名字,对吧,也就实际上就是前端的路由,你点击ro.js的话呢,那么你就会发现,诶,比如说我这个斜杠acl斜杠。
14:11
我的明星里斯。啊,对吧,或者说啊,Doin斜杠list对吧?它这个权限管理模块,这个路由的开头呢,是以斜杠AC开头的,然后呢,斜杠A的in斜杠list,你会发现它的名字是什么呢?名字是A的in-user,也就是这个路由的名字是A的in-U全大写对吧?而这个路由的名字是这个呢,那么它所对应的组件呢是。当然这个at符呢,表示的是我们的src文件夹下面的views下面的acl文件夹下面的啊,Domin下面的什么呀,List对吧,因为你可以看到我们的这个admin a c。下面的admin下面是吧,有一个list这样的一个组件。
15:00
所以说这个就表示它的路由是啊,In斜杠list的路由的名字是大写的M-user,然后呢,它要访问的组,这个路由对应的组件是什么呢?是这个文件夹下面的list的view对吧,然后你再看它返回的数据,诶。它可以访问的权限呢,有一个啊,Domin-user对吧,那说明我们就可以访问呃,用户管理呃这个组件对吧?所以说实际上我们数据库里边保存的权限的编码是什么呢?是前端的路由的名字对吧?前端路由的名字好我们在这里边,我们首先对吧,我们进入到我们使use gma report。对吧,然后show tables,我们先看一下这里面有哪些表对吧?啊,它只有两张表,那么我们在前面的话呢,我们就来来create table云台左元对吧,然后test,然后在这的话呢,比如说我的一个字段,我只有一个字段,User nameme 8char 100,然后分号对吧?或者你没有分号也可以,然后在这的话呢,我直接进行提交。
16:18
对吧,呃,当然在这里面的话呢,它出现了一个400这样的一个,呃。就是说错误对吧,所以说我们在这的话呢,我们就要来看一下对吧,怎么样把这个bug呢,给它解决掉,你可以看到这里面的话呢,是一个400,我们来看一下它的,它叫做bad request对吧,也就是我们在请求斜杠report,斜杠create my table的时候呢,它的请求出现错误,我们来看一下,首先它发送请求呢,是向report create myq table,呃,是一个post请求,我们看一下。我们看一下这个create table controller,对吧?呃,这个UR呢是create my table,那么这的话呢,并没有什么问题对吧?并没有什么问题,呃,然后我们再来看一下它带的数携带的数据对吧?呃,字段的是CQ,那么这个也没有什么问题对吧?这个也没有什么问题,我们看一下这请求的是create myq table,我们来看一下这。
17:22
Create my。呃,并没有任何的问题,对吧,我们来看看,呃,这里边有没有报什么错误对吧,他说是没有办法进行反序列化,呃,从这个object里边对吧?没有办法从这个object里面呢,进行反序列化。呃。好,我们来研究一下对吧,我们来看一下这个q que这样的一个类,呃,那么这个呢,是private stringq。啊,对吧,那这个是没有什么问题的,然后呢,在这的话呢,我们看一下这个controller里边create my table对吧,呃,Gma report,然后root root。
18:04
呃,看样子也是没有什么问题对吧,看样子也是没有什么问题,我们再来执行一下,那么他还是一个呃,错误的请求,对吧,那么它还是一个错误请求,好,我们现在我们就来。继续来研究一下,哎,他说是。Http convert。Jason帕A,对吧,Jason帕。呃,我们来看一下我们接收的参数呢,是一个request body,那这个是没有任何问题的,然后呢,我们来看一下它前端发送的请求,对吧,Myq query,然后在这里面呢,Report API,呃,Create my table,对吧?然后这个是一个data,呃。没有任何的问题。
19:01
呃,等一下啊,这个可能这里面参数传的有点问题,我这个传的参数呢是一个。呃,字典,然后在这里边的话呢,我们传的参数也给它变成了一个字典,实际上这应该直接写成什么呢?应该直接写成create string,也就是我刚才实际上在前端的传参数传的是有点问题的,对吧,有点问题的啊,我们在这里面我们重新刷新一下这个页面,然后呢,我们再来写一个create table语音台左源test对吧,因为你传参传错了嘛,然后呃,这个只有一个字段玩叉。100,然后呢,我们点击一个,我们在监听一下他的请求,对吧,把这些以之前发的请求都给它删掉,都给他清空掉,然后提交,哎,这样的话你发发现。那就建表成功了对吧?那我们在这里面我们show一下tables,哎,你就会发现云台左源test,呃,这张表呢,就已经建表成功了,我们DEC以下云台左源对吧?Test,诶你可以看到只有一个字段对吧?所以说你碰到呃,当然就是说碰到这个bug的话呢,呃,可能你需要跟前端去交流一下,告诉他说,诶你是不是这个前端请求的时候呢,是不是发错参数了,对吧?因为我们后端的API呢,写的是没有任何问题的,对吧?所以说你可能需要沟通一下。
20:26
当然最好的情况就是啊,你自己也会前端,然后把这bug呢,直接给它修掉,对吧?好,那么我们接下来的话呢。由于我们的呃报表管理模块,当然click house它其实也是。相同的道理,对吧,Cle浩斯其实也是呃,相同的道理,所以说呢,呃,我们可以按照同样的方式呢,你可以去测试它一下,对吧,你可以去测试它一下啊,你可以看到这个请求发送的有没有问题啊啊,发送就没有问题啊啊,当然他们原理都是完全一致的啊好,那接下来的话呢,我们就开始讲解任务调度模块的编写,也就是写一个小型的任务调度模块。
我来说两句