00:00
呃,好,那我们现在开始编写云台杠back hand对吧,也就是我们这个中台项目的呃后端对吧?中台项目的后端当然就是说呃,你在编写这个后端的时候呢,首先肯定是要呃我们先把这个项目给它关掉。对吧,呃,当然你在这边,你可以把这个。后台给它终止掉,呃,然后呢,我们在这里边点击文件,然后点击新建一个项目,呃,当然在这儿的话,我们新建一个什么样的项目呢?我们新建一个云台杠back汉的吧,呃,然后呢,我把它保存在我的家目录下面,对吧?啊,因为我们仓库里面代码我们就不需要动它了,因为它可以直接跑起来,然后呢,我们就直接给它放在加目录下面吧,然后点击确定好,然后在这儿的话呢,我的JDK呢,我选的是JAVA19,因为我们说过spring boot3.0呢,它所支持的Java的最低版本实际上是17,然后我们使用maven呢来进行管理,呃,我们的这个项目,然后在高级设置里边,比如说我在这儿的话呢,我就可以写一个组组的ID的话呢,是com点硅谷对吧,然后弓箭的ID呢,是云台杠back的吧?
01:23
啊啊,然后接下来的话呢,我们就可以点击创建了,对吧,我们就可以点击创建了啊,那么这样的话呢,他就创建了一个新的项目对吧,就创建了一个新的项目,呃,当然你可以把这个代码呢,直接给它关闭掉,对吧?呃,然后呢,我们在这的话,我们就在新的项目里面开始写代码。我们不需要去动那个仓库里面的代码,好,呃,当然就是说编写一个maven项目,或者说编写一个Java项目,它的第一步肯定是要先把我们用到的依赖给它引进来,呃,当然在这里面的话呢,我们使用的是呃,Spring BOO3.0,所以说呢,我在这里边我首先要引入呃,Spring BOO3.0的这样的一个依赖,对吧?首先呢,当然是一个group ID,呃,对吧,然后呢,是接下来是一个artifact ID,好,那么这个artifact ID的话呢,我们使用的是spring boot starter parent。
02:27
Parent对吧,也就是说这个东西的话呢,它是一个,就是说你要引这个spring boot进来的话呢,实际上你必须是要有一个parent标签啊,那么在这的话呢,我们的版本呢,就直接使用最新的这个spring boot3.0好啊,那这样的话呢,我们boot start parent,就是说我们把这个副项目呢,已经给他引进来了,接下来的话呢,我们就可以开始引入一些。我们要用到的依赖啊,当然在这里面的话呢,它是一个呃,Dependences,好,那么我们第一个我们要引入的依赖呢,就是spring boot的web组件,对吧?呃,也就是说我们有了这个web组件以后呢,我们就可以编写一些控制器,然后来接收请求,然后返回响应对吧?呃,所以说我们在这的话呢,我们需要有一个spring boot start web这样的一个启动器,好OK,那么现在的话呢,我们的这个spring BOO的start web我们已经有了,那么在这里边的话呢,呃,我们说过它是一个什么呢?它是一个就是说web组件的启动器对吧?好,Web组件的启动器啊,那这个是必须要有的啊。那么第二个的话呢,我们需要的是什么呢?当然我们还需要一个spring boot starter,对吧,好,Spring BOO。
03:56
Starter,那这个就是spring boot的启动器,那这个我们也是需要,对吧?Spring boot启动器好,OK,也就是说这两个依赖呢,我们是必须导进来的,好,那么有了这两个依赖的话呢,那接下来的话呢,我们就开始导入一些其他的必须的依赖,比方说我们如果想要对MYCQ进行增删查改的话呢,显然我们是需要引入这个,呃,JDBC对吧,对MYCQ进行增删查改。
04:33
对吧,所以说我们需要入GDBC这样的一个驱动,MYCQGDBC好,所以说在这的话呢,我们要引入的是一个买CQ connector Java OK,呃,当然在这的话呢,我们这个买CQ的话呢,我就直接使用它的最新的版本吧,啊,那最新的版本呢,是比方说8.0.31,或者说8.0.30,对吧,都是可以的啊,那这个是它最新版本好。
05:02
那接下来的话呢,我们之前还讲过,我们这个中台的项目,除了依赖买CQ以外呢,当然它还依赖了呃我们的house,所以说在这儿的话呢,我们还需要引入呃click house的GDBC驱动,对吧?那么这个也是需要引入的,那这样的话呢,我们就可以对click house呢,来进行一个呃增删查改了对吧?来进行一个增删查改了,那在这的话呢,是click house g d bc,呃,那么我们用到的是com.click house对吧?然后呢,这里边的版本呢,我们用的是0.3.2杠呃,PAT11啊杠PAT11OK。呃,那么在这的话呢,我们还可以再写入一些c house官网,它要求。呃,我们引入的一些东西,比方说这个classify,对吧?呃,我们这里边可以给他一个all,当然你不需要去管他说具体是干什么,实际上这个就是呃,我这里边写的只是说它是呃c house官网推荐的一种引入依赖的方式而已,所以说在这的话,我再来一个exclusion,就是把一些东西排除掉,呃好,在这儿的话呢,我们同样要排除掉一些东西,OK啊,那现在的话呢,我们已经有了c house的GDBC驱动了啊,当然的话呢,我们之前还说过,就是我们还需要有一个new forg的驱动,对吧?因为我们用到了new forg这样的一个图数据库,所以说在这里边的话,我们呃也依次把它引进来,那么这个是new forg Java driver。
06:47
好,然后呢,我们使用的版本号是多少呢?我们使用的版本号是呃,5.3.0吧,我们也直接使用比较新的这样的一个驱动,OK啊,那现在的话呢,我们依赖的三个数据库买CQ click house以及new j的驱动呢,都引进来啊,当然就是说你还可以呃把类似于像GDBC啊,什么S呀等等等等,也就说你要用到什么数据库,你就把它引进来就可以了,你就把它引进来就可以了,好,当然由于我们前后端的健全方式呢,我们用到了Jason web token这样的一个技术,对吧,所以说我们需要把Jason web token的呃,相关的库呢,也给他引进来啊,也就是说。
07:36
当然我们现在可以大致的来说一下,说这个Jason web token它具体是,呃,做什么样的一个事情对吧?呃,那我们都知道,现在就是说前端和后端它的一个交互的方式呢,基本上是使用这种Jason的数据结构,或者说Jason数据对吧,前端,然后呢,我除了有一个前端以外呢,那我还要有一个后端,呃,对吧?那么我们这个Jason web token它主要是干嘛呢?那就是说当我前端进行登录的时候。
08:12
对吧,那我前端我在进行登录的时候,我填入了用户名和密码,我在进行呃登录的时候呢,那么后端会根据你的用户名密码之类的东西啊,来计算一个Jason web token出来,然后呢,将这个Jason web token返回给前端。对吧,当然你可以把它简称为JWT都是可以的,Jason web token,那么当前端拿到后端返回过来的Jason web token以后呢,他就会把这个j c web token啊存到哪里呢?存到前端浏览器,比方说呃,Cookie里面,对吧,它会把这个j token呢,存储到前端浏览器的cookie里面,当然就是说如果你这个前端它并不是一个浏览器,而是一个比方说是一个。
09:09
手机APP之类的,那你这个j ton它可能存储的位置不一定是cookies对吧?呃,也可能存在手机的本地的数据库里面都是可以的,呃,总之呢,就是说前端在拿到这个Jason web token以后呢,它肯定是要把它存下来的啊,当然了这个会有一个过期时间,这个Jason web token可能是一周或者说两周之类的啊,当我们的前端这个cookies里边保存了这个Jason web token之后呢,那么在之后每一次前端。访问后端,或者说我们访问前端的页面,或者说每一次前端向后端发请求的时候,对吧,他就会在这个请求的请求头里边,请求头中带上这次web token访问后端,对吧?那你请求同行带上这个Jason web token访问后端之后呢?呃,当然后端他接收到你的请求以后,他发现你携带着这个token,他就知道你是哪一个用户。
10:18
对吧,那么它就避免了什么呢?避免了我们每次访问页面都需要登录一次,也就是说你第一次登录完以后,对吧,我们再来讲一下这个过程,你在第一次输入用户名和密码,呃,登录之后呢。那么后端会根据你的用户名对吧,或者说一些其他信息计算一个Json web token出来,呃,当然就是说这些计算过程之类的,我们后面都会去写代码对吧?那么计算一个j web ton出来以后呢,返回给前端,然后前端存在cookie里边,然后前端之后每一次访问对吧?我们每一次前端向后端发请求的时候呢,他都会携带这个这层token。对吧,携带这个Json token,那么我们带上这个j of token以后呢,后端发现,诶你你带着token过来的,那我就不需要你登录了,换句话说我就不会呃重定向到前端的这个登录页面,而是你直接访问其他页面就可以了,对吧?呃,当然我们由于。
11:19
我能拿到你的Jason web token,所以说我可以根据这个Jason web token呢,把里边的用户名给他解析出来。而我们可以使用这个用户名呢来判断对吧,这个用户他有哪些访问权限,我们还可以做一些类似于健全的工作,呃,健全的一些工作对吧?呃,所以说这个就是这次web token的呃作用,实际上它主要的目的就是我后端返回给前端一个J以后呢,那我前端。我带上这个Json up token,我就不需要重复登录了,我只需要登录一次就可以了,对吧?当然这个Json token呢,它是有一个过期时间的,可能过了一周以后,对吧?你设置的过期时间是一周,那么过了一周以后呢。
12:11
浏览器的cookie就会自动把这个j token呢给它删掉,对吧?那么你之后再请求的时候呢,你就由于这个j token呢已经被删除了,你就没有办法说带着这个Jason token来继续访问后端了,那么后端对吧,他发现你的请求头里面没有Jason token,那么就会对吧,返回一个说你无权访问对吧?那么前端呢,就会重定向到登录页面,那你就需要重新登录了,所以说我们会发现说。我们平常在访问一些网站的时候,你会发现说,诶我登录一次以后呢,可能接下来的一周或者说两周我都不需要重新登录啊,但是一过了这个时间以后呢,诶,我又需要重新输入用户名和密码了,对吧。所以说这个就是token的第一个。
13:02
作用,那么第二个作用呢,就是我们可以。通过你前端发过来的这次web token呢,把用户名解析出来,然后根据用户名呢来判断一下,对吧,当前用户他的权限是什么对吧?或者一些其他的一些呃这样的一些工作都是可以做的好,所以说我们接下来的话呢,我们就把这次web token相关的呃,这个库也给它导进来,对吧?那么在这里边的话呢,我们还是使用一个呃,就是说很有名的呃这样的一个库,对吧?那么叫做什么呢?叫做GJWT对吧?我们先导入这个JJWT的API,然后呢,我们使用比方说零点十,1.5,然后呢,我们还需要导入一个什么呢?导入一个JJWT的呃。Ipl这样的一个,呃,就是说库对吧,当然也是00:11点五,呃,那么有关这些web token呢,大家现在可能觉得说,诶不是特别特别好理解,呃,我们后面我们在编写相关的代码的时候呢,那大家就可以明白它到底是做什么对吧?好,呃,我们会详细的去讲解,那么接下来的话呢,我们还有一个JJWT,我们把这个Jack克son对吧?呃,这个Jackson呢,是用来做Json序列化和反序列化的一个库,对吧?我们把这个JJWT对Jackson的封装呢,也给它导进来,好,那么有关GC web token的呢,我们就都已经导入完了,那接下来的话呢,我们还要导入一个,就是因为我们要自己要实现一个,呃,定时任务的调度模块,所以说我们在这里边的话呢,我们需要导入什么呀,就是说定时任务调度模块。
14:56
需要导入什么呢?需要导入这个跨子啊,也就是我之前说过这个跨子呢,是在Java里边呃最有名的对吧,或者说最久经考验的一个呃定时任务这样的一个调度器,当然就是呃supreme boot,它其实在spring全家桶里面,实际上呃也有调度器,包括或者说我们Java自带的这个呃timer这样定时器,对吧,实际上它也是有的,但是呃在这儿的话呢,我们其实嗯还是要使用呃业界最富盛名对吧,或者说使用的最多的呃这样的一个跨S这样的一个库,对吧?好,所以说我们接下来的话呢,我们把它导进来啊,那么classs的话呢,当然我们在这儿的话呢,我们使用到的版本呢,比方说我们使用到的是2.3.2对吧,好,那这个是又一个依赖,OK,呃,那接下来的话呢,我们还要导入一个什么样的一个依赖呢。
15:56
那就是我们在计算血缘关系的时候呢?
16:00
我们需要对CQ呢进行计算血缘关系时,需要对CQ进行语法分析,所以说我们这里面的话呢,我们还需要导入一个用来对CQ进行语法分析的这样的一个呃库,对吧?需要对CQ进行一个呃语法分析,好所以说我们需要导入的呢,就是我之前说过的,呃,非常有名的一个叫做anti台LR对吧?当然在这的话,我们导入的名字叫做anti lr4-wrong time啊,我们使用的是anti泰LR的一个最新的版本对吧,04:11点一啊,那这个呢,是我用来对CQ进行语法分析的,当然它这个安特LS呢,呃,它的学名其实叫做啊叫做什么呢?叫做语法分析器生成器对吧?啊,那这个语法分析呢,它主要是在。
17:00
编译原理这门课程里面呢,呃会给大家讲解,呃,当然这个编译原理这门课呢,可能会比较难,但是at特LR的使用呢,呃可能它并不是那么那么难,呃当然它也有一些难度啊,所以说我们呃在使用这个anti lr4来对CQ进行语法分析之前呢,我可能会举一些其他的例子,呃,比方说使用这个安LR4呢,呃实现一个比如说带赋值的计算器啊,或者说等等等等其他的一些。小的这样的一些安踏R的例子或者说教程来帮助大家熟悉一下,当然你要想把这个这个工具掌握的非常熟练呢,呃,也不是。特别容易的一件事情,对吧,可能你要学一些东西呢,呃,也是比较多的,呃,但这个没有办法,因为你想要计算这个表级的血缘关系,对吧,可能表级血缘关系相对来说还是比较简单的。
18:00
那如果说你想要使用呃安L4呃来分析一些字段级别的血缘关系,那可能呃需要你对这个语法分析器生成器,也就这个安R4呢。呃,会有比较深入的一个了解,对吧?那到现在为止呢,我们所有的依赖就已经导完了,呃,因为实际上我在写代码的时候呢,并不呃喜欢说是导入特别特别多的依赖啊,呃,我只是导入最必要的依赖,而且这些依赖呢,它必须是呃就是说质量非常高的一些依赖,呃当然就是说实际上我们在写一个后端项目,尤其是使用Java写一个后端项目的时候呢,呃,那可能。呃,当然我们先先把这个刷新一下啊,刷新一下它就导进来了啊,那就是你在使用Java的时候呢,呃,写后端的时候呢,可能要会导入一些,呃,很多其他的一些依赖,比方说呃,比较有名的一些依赖,Longbo对吧?啊还有什么my Betty,呃,或者说什么my bad is plus对吧?呃等等等等这样的一些依赖啊。
19:11
或者说比方说还有一些类似于像这个fast Jason啊等等等的这样的一些库啊,那这些库呢,实际上都是呃国内使用的很多的一些依赖,那么我在呃敲代码的时候,后面敲代码的时候呢,呃会大概跟大家说一下,就是这些库我为什么没有把它引进赖对吧?为什么没有把它引进来,呃为什么我们只需要引这些呃最基本的一些,或者说比较底层的一些依赖呢,就能完成我们的这样的一个工作,对吧?呃我们后面来写代码的时候呢,我们会呃大致给大家讲一下一呃原因,比方说这个longb对吧?呃,他使用一些longb的注解呢,呃会。省掉我们写很多样板代码的工夫,对吧,包括说呃使用MYT或者说myty plus呃这样的一些or IM的工具,对吧,或者说使用fast Jason这样的,呃就是说对Jason序列化的一些工具,为什么我们呃并不需要把它引进来就可以呃编写一个后端的,这个是我们。
20:16
呃,后面呢,呃,我在敲代码的时候呢,呃,可能会大家会跟大家提一下,包括比较一下,就是说哎,我的写法和这些写法它到底有什么区别对吧?呃,以及我不引入他们的一些理由,好,那我们批完文件呢,我们就已经编写完了。
我来说两句