00:00
好,那接下来呢,我们来看一看这个代码生成器的一个创建,那么代码生成器它的创建的基本原理呢,是依赖数据库表的设计,然后自动呢,将自数据库表的设计呢,映射到我们的啊应用程序的代码当中去,那生成我们的实体类映射文件,Map文件,Service文件以及controller文件等等相关的这样的一系列的内容。那所以首先呢,我们就必须得先把数据库创建出来。好,我们先创建一个数据库啊叫。新建数据库,然后这边呢,我们就写DB20。0921,然后下划线S2B考字符集这块呢,我们选择UTF8MD4 UTF8MD4是对UTF8的一个修复啊,UTF8里面有一些小问题,有一些代码呢,有一些文字呢,显示不出来,比如说表情符号啊,它就显示不出来,然后所以我们用MB4,然后这面呢,我们用general CI,然后呢,在这边呢,我们点确定。
01:15
啊,然后接下来呢,我们在这个呃里面呢,去生成我们的嗯,Circle口啊,那就直接执行就行了,所以呢,就选择运行circlel文件,然后呢,在我们的资料中,第二部分的资料中有一个s rb car,然后我们点打开啊,直接点开始。好点关闭,然后接下来呢,我们来看一下这面呢,就生成了一些数据库的表,那这个数据库表都是什么呢?我们先不一一介绍啊,我们呢用到哪个我们再介绍哪个啊,所以我们今天呢,第一件事情呢,要根据这些数据库表生成所有跟表相关的实体类service map以及CTRL了,好然后呢,所以代码这个需呃生成器需要的数据和数据库有了之后呢,我们呢,就在这个地方呢,创建我们的代码生成器,代码生成器这块内容呢比较多,不需要大家自己会写啊,因为呢,在我们的my plus的官方文档中,咱们可以找到这样的一个代码生成器的示例,所以呢啊,我们就需需要知道的是代码生成器里面的每一部分内容是什么,然后会对这个代码生成器做相应的修改就可以了啊,所以呢,我们来看一看在买贝的这个官方文档当中,咱们在哪个地方能够找到代码生成器的一个基本事例。你可以。
02:34
把那个直接粘过来,进行一个简单的改造就可以了。好,My day is class。好,然后接下来呢,在这边呢,我们点这个快速快速开始是吧,那个关上,然后呢,我们找到这面有一个代码生成器啊,这块就是我们的代码生成器的事例了,所以你会发现这里面的一些基本的内容啊,比如说生成代码生成器呀,全局配置呀,数据源配置呀,包配置呀,是不是都在这里面呢?那我们写的这个代码生成器也都类似啊,创建代码生成器呀,全局配置呀,数据源配置呀,包配置呀,只不过呢,我们会根据我们自己的需要呢,来再进行一个优化啊,进进行一个简单的修改,所以呢,这个就是代码生成器,只要你能看得懂这段代码,把这段代码先复制过去,然后一葫芦花瓢啊去运行一下,然后改一改,就是我们自己的代码生成器了,所以我们讲代码生成器呢,啊,首先呢,我先把这段代码生成器呢,给它粘贴到咱们的项目当中,然后呢,先生成一下代码,咱们先看一看生成之后的代码长什么样,接下来。
03:58
呢,咱们再一行一行的去看看这个代码生成器里面每一部分都是什么意思啊好,那因为代码生成器呢,它是开发的过程当中的一个辅助代码,我们并不需要最后呢发布到生产环境当中,所以呢,一般情况下这类辅助代码呢,我们就直接写在测试包里面的,所以呢,我们在这个地方。
04:18
在测试包里面啊,在测试包里面我们创建这样的一个包,我们找到,然后找到test,在这个Java目录下面,我们创建一个package,好,然后在package里面呢,我们创建这个代码生成器,那我们直接把它复制过来就行了,因为这个不需要大家独立的去从零到一的编写。然后接下来呢,我们直接复制它。好,大家要会看,要会改里面的某每一部分的内容,然后呢,我们首先把需要的依赖呢,先给它引进来,像这个test,我们引的是第一个哈org,直接unit,然后这个呢,我们引,我们引第一个啊叫generator,然后给它看好这样的话就都引进来了,都引进来对于你来说呢,你需要改几个内容,比如说这个作者你改成你自己,然后接下来呢,这个你改成我们的数据库的名字,那我们数据库的名字呢,叫DD。
05:18
200921好,然后在接下来呢,这个位置啊,驱动和用户名和密码,尤其是用户名和密码,你需要确认一下你自己的这个情况,然后再往后呢,目前为止我们就先不用改了,咱们就统一设置就可以了,好我们先运行,然后一会儿呢再看一些其他的细节,所以呢,我现在呢,在这个地方呢,就右键运行我们的代码生成器。好啊,如果这边出现绿色的勾的话呢,就说明我们的代码生成器生成完成了,下面呢,它会有一些日志输出啊,然后我们整个的代码生成器呢,啊,这个整个的这个创建的过程的所有的日志呢,就打印在这儿了啊,一般情况下,这日志如果正常的输出了,并且最后文件生成完成,那就说明我们的代码生成成功了,好,然后接下来呢,我们来看一下我们生成的代码啊,我们生成的代码在哪呢?在这个地方设置的,就是在全局配置这个里面有一个呢,叫做project pass,那这块呢,会嗯,找到我们当前的这个用户,也就是说你Windows当前的这个用户是吧?啊下面的这个这个项目,这项目就是SRB这个项目啊,SRB项目里拿的这个代码所在的这个子项目叫service,靠这个项目所在的一个什么这个绝对路径,所以呢,这个project pass最终获取到的呢,就是我们的D盘PROJECT200921JAVA s rb,然后杠service car啊,所以这个。
06:53
可能就是project pass,它获取到的路径,然后接下来呢,这个路径下我们代码要写在哪呢?我们要写在service card men这个下面,要写在Java这个路下,对吧?所以呢,这面呢,就是GCJC,就是我们的全局配置对象,Set output DR就是设置我们的代码所输出的位置,那么啊。
07:13
加上我们刚才呃,这个获取出来的这个绝对路径,再加上service car,然后再加上什么呢?S r c Java,所以再加上这个路径s r c Java,所以这个呢,就是我们整个代码生成的位置了,那么我们来看一下这代码呢,确实已经都生成在这个位置了,接下来呢,就是我们的这个有一个下面有一个包的一个配置,包的配置这块呢,叫package的好,然后呢,这个包的配置呢,我们是设置所有的包都放在这样的一个副包下面,叫com点艾特硅谷点S2B点com啊这块是com点艾特硅谷点S2B点com,所以这是在这个地方设置的,然后呢,默认情况下呢,我所有的代码呢,都有一个默认的包,比如说呢啊我的实体类,它会默认给我放在一个叫做安entity的一个一个包下面,但是我不想用这个enity这个默认的包,那这样的话呢,我就想放在po go enity下,那我就自己定。
08:13
第一个报名这样的话呢,所有的实体类就被放在了这个Togo下面啊,比如说呢,这个就是数据字典啊,这个呢是这个啊,然后这呢是用户是吧?啊所有的实体类都生成好了,好,这个呢是。我们所说的包的设置,那同时呢,你也可以设置其他的包,比如说呢,我们可以设置PC.set啊controller啊,比如说我controller呢,它的默认的包呢,就是这个,就是这个名字叫controller啊,你不想放在controller下面,你想放在web这个包下面,那你这块就写web就行了,好,因为我用的是默认的,所以我这边呢就不写了,好然后接下来呢,还可以set啊,比如说set这个map map呢,就是所有的这个映射文件的默认的报名,那它就叫map啊,那我们也用默认的,还有呢,就是set service service呢,就是所有的呃,这个service就是呃那个呃。
09:11
服务对吧,所有的服务啊,默认的报名,那我们呢,就写在这个service下面,好,这个是XML设置,所有的XL文件,默认的一个目录的名字啊,那你可以用这个XML来定义啊,所有的路径呢,我们都可以通过这个的方式呢去自定义啊,那如果都想默认的话呢,我们就不用写了,好,那所以其他的我们就默认了,那比如说service我们放在这。啊,然后service的这个,呃,实现我们放在这儿啊,这都是默认的,然后matter我们放在这儿,然后map里面的XML的配置我们放在这儿啊,然后呢,Controller就放在这,好,这个我们都尊重它的默认配置就可以了,那这块呢,就是我们所说的这个包的配置了,然后接下来呢,我们再来看一下,这个呢是数据源的配置,所谓的数据源的配置呢,就是我在生成这个代码的时候,我一定是从数据库当中我获取到相应的数据源,然后我根据数据库当中看,我们数据库当中123456,这不是有16张表嘛,对不对,16张表呢,对应于在这个地方我们生成了16个实体类啊,所以呢,它一定是先能够找到数据库,然后从数据库当中呢,去分析这16张表,从16张表当中呢,再分析表中的这个各个这个列,然后把这个列呢变成属性,把表呢变成类对吧?啊这样,那所以呢,他就必须得联系到数据库,那他怎么去联系到数据库呢?用数据源配置啊,所以这个地方呢,就是我们。
10:36
很具体的数据源的一个具体的实现的一个位置了,所以这块是包配置和数据源配置,然后再接下来呢,我们来看这块呢,就是一个author,就是设置我们的作者,那我们的每一个文件的上方呢,都有一个呃文档注释,这个文档注释呢,首先这个部分的内容啊,它是从数据库表里面提取出来的,比如说包就是借款人表,那借款人表呢,我们在数据库表里面在做这个表设计的时候,我们呢,可以给他写一个注释,叫借款人啊,那这个表里面的这个注释呢,就会被自动的提取到我们的代码当中,然后接下来呢,这个就是author。
11:13
这就是我这个刚才在代码生成器里面设置的这个作者,那这个项目下面的所有的自动生成的代码的奥,那肯定就是我了,对不对?好,接下来呢,就是这个日期,那这个日期呢,就是今天啊,就是这个代码编写的日期,好这块呢,就是我们的一个author啊,然后接下来呢,就是open open的话呢,就是我们生成完这个文档之后,我给大家演示一下啊,那要演示的话呢,我就必须得把已经生成的文档给它删掉。好吧,已经生成的这些代码都给它删掉,删掉之后呢,我们重新来生成一下,如果这个地方呢,是open等于true的话。Open等于true的话,我们重新来生成。
12:07
好,那么大家可以看到。在我另另一个屏幕上啊,它就弹出了一个窗口,这个窗口呢,就是我代码生成的位置。好,那所以那个open等于处是什么意思呀,就是生成完代码之后,是不是要自动的打开资源管理器,那我这个资源管理器呢,就被自动打开了,那么这个呢,实际上就是我整个代码生成的一个具体的路径了,然后这个com艾特硅谷S2B,靠这块呢,就是我代码生成的一个具体的位置了,是不是啊,但是这个没有必要啊,我们直接在这边看就行了,所以呢,这块我们可以给它设置为false啊,然后接下来呢,这个是set service name,这个set service name是什么呢?我们来看一下,首先呢,我把它给它屏蔽掉。屏蔽掉之后呢,咱们再来重新生成一下这个代码,最后还得把它删掉哈,好这个包呢,就删不删就无所谓,我就不删了,然后咱们呢,生成一下。
13:14
好,那生成之后呢,我们来看一下咱们生成的这个service层的代码,那你会发现呢,我们这个生成的service层的代码呢,它默认的名字呢,叫I,什么什么service都有一个I的前缀,那这也是有一些公司的开发规范呢,就要求service层的接口呢,必须加一个前缀I,所以呢,买贝plus它生成的这个service接口层的代码呢,都有一个前缀I啊这是针对service的,好,那如果你觉得不是特别习惯看起来啊,你想根据我们之前的这个习惯,就不想要那个I前缀的话,那么我们可以通过这种方式呢,去自己定义我们service默认的名字,那这个Dollar s呢,就是一个占位符,这个占位符呢,表示的就是这个实体的名称,比如说呢,这边实体的名称呢,它叫date,那么Dollar s呢,表示就是date,所以它生成的service呢,就是Di service就可以帮助我们自动的去掉那个I前缀啊,所以这个是我们的service了。
14:10
然后呃,所以呢,我们在这个地方呢,再重新上传一下啊。商场。好,然后我们再来看这个service,你看那个I前缀就没有了,然后再接下来呢,就是这个set ID type,这个是主件策略啊,因为我们这个项目当中,数据库的这个数据访问量并不大啊,所以呢它数据本身也不多,所以呢我们没有必要用那个分布式ID生成器了,我们就直接用凹就可以了,因为我们不做这个横向的这个分表的这么一个工作哈,好,然后呢,接下来呢,我们就来看一下,在这个实体类里面,它的这个主键策略,每一个ID属性上面呢,它都帮助我们加了一个叫做ID type的凹这样的一个组件策略啊,当然它这个可能是模板的原因吧,它这个有一个缩进啊,你可以把它给它还原回来啊,这倒是不影响我们程序的运行,好,那这个就是我们整个的这样的一个组件策略,在这个地方的一个生成,然后再接下来呢,就是这个swaer to swaer to是什么呢?这个后面我们会讲到就是啊,它可以帮助我们自动的生成接口文档。
15:24
啊,所以呢,事先我们在我们的这个程序当中。我记得是在这个地方,我们先引入了这个SPA的依赖啊,如果这个SPA的依赖我们不引的话呢,那这面我们呃代码生成器这面呢,要配置swa,配置swa的话呢,我们的程序当中呢。程序当中呢,会有一些呃,Swaer相关的一些注解,你像这个API mode,还有API mode property都是swa相关的注解,所以呢,如果你不引这个swaer相关的依赖哈。
16:02
这个地方。这个地方啊,如果我们之前不把SPA克相关的依赖引进来之后呢,那这边代码生成器生成完这些注解呢,将会找不到依赖,所以就会出现问题,因此呢,我们之前呢,先引了这样的一个依赖,然后这面呢,我们进行一个spaer设置的时候呢,这面呢,就能够把spaer相关的这个注解展示到这个位置了,那么这个注解有什么作用呢?啊,回头我们讲到spaer的时候,我们再详细来说这个注解的作用啊,总之呢,如果我们自己去人工加这个注解的话呢,还是非常麻烦的,大家可以发现每一个类当中都有,每一个属性当中都有,对不对啊,所以呢,这样的话,代码生成器呢,能够帮助我们完成这样的一个注解的添加啊,并且这个注解当中呢,它还有一个可以自动的把数据库表当中的这个列的注释拿出来的这样的一个作用,你看这个地方都是针对于这个列的说明,这列的说明是哪来的呢?是从数据库表的设计当中拿来的,比如说API model啊,像这个包借款人他呢叫做借款人对吧,然后他每一个列呢,有编号,有用户ID,这个是从数据库中自动读。
17:04
提取出来的,那我们还是看这个包,它有个注释叫借款人啊好,然后呢,它的列设计后面这有注释,有编号,用户ID姓名,所以在列上呢,我们把这个数据库设计表的时候呢,把这个注释都写完整,那这样的话呢,代码生成器生成的时候呢,它自动呢,就给我们生成到这个上面的这个啊注释的这个部分了啊,能够帮助我们知道这个东西是啥,对吧,这是年龄啊好这块呢是我们的。代码生成器这块啊,刚才我们提到的是关于凹凸,以及由凹凸引申出来的一些其他的一些注释,还有呢,就是这个swa啊swa这些这些呢,都是跟我们的实体类相关的一些设置好,然后接下来呢,你看这边呢,我们就一个全局配置对象里面,全局配置对象里面的所有的信息你都设置好了之后呢,我们把这个全局配置对象呢,设置给MPG对象,那MPG对象呢,就是我们的代码生成器了啊,所以这块是全局配置这一块。
18:01
然后呢,这个代码生成器,当你全都配置好了之后,MPg.XQ就直接执行就可以了啊,这个就是最终执行的过程,好然后呢,我们已经把这个几个比较简单的内容看完了啊,包括代码生成器的创建,包括全局配置的创建,包括数据源的创建,包括包配置,然后最后呢,我们再看一下策略配置,策略配置这一块呢,比如说第一个我们呢,是设置了一个名称,这个名称呢是什么名称呢?是数据库表的名称,那数据库表的名称这个策略如果我们不配置的话,大家看一下我呢,把后面的这个策略呢,先暂时都给它删掉啊,好,然后我们重新生成这个代码。好,然后接下来呢,我们重新生成。好,代码已经生成成功了,生成成功了之后呢,我们来看一下它生成的代码,大家看这里面生成的代码呢,可能看起来呢,就有点不太舒服了,因为它违反了我们Java编程的一个编程习惯,就是驼峰式的编程,并且类名的手写字母式大写,这种他倒是手写字母大写了,但是后面他没有满足驼峰编程的一个习惯,对不对啊,我们数据库表明叫做borrow info borrow touch,那它呢,就原样就给我们拿过来了,所以呢,我们希望它这个不叫下划线音符,而是叫大写的音色,对吧?啊,所以这块呢,就是表明的策略,这个表明的策略我们在哪设置呢?就在这个地方设置。
19:37
叫做下划线变驼峰啊好,然后列名呢,也有这个问题,比如说我们数据库当中有一些列,你像这个。我看一下啊,数据库当中的一些列。比如说像这个ID card user ID这些列啊,然后我们看一下borrow for。Burn in four里面。
20:01
你像这UCID对吧,还有这个。Create time,包括update time是吧,Many use这些都是下划线的表现形式,那但是实际上我们不想让它直译过来,我们也是想让它下划线转驼峰,那么这个怎么办呢?这就是下面这个策略,叫做列名的下划线转驼峰,所以上面呢是set nay,这个呢是set column na啊叫列名下划线转头风好,然后这盘呢,是我们的关于字字段名的一个设置,然后接下来呢,这个。这个是longb,刚才我们没有加这个longb哈,所以呢,你会发现我们生成的这个实体类里面呢,它呢就有一些盖赛的方法,对吧?啊,有这些盖赛的方法一大堆,但是还挺占地方的,包括to string方法都自动生成了,那我们之前学过这个long box,只要在这个地方呢,加一个data注解,实际上呢,后面的这个单S方法我们就不用写了,那么在这个我们的代码生成器里面呢,也有这样一个策略叫set and long box,给所有的实体类呢加long主件啊,这是long,然后我们先来看一下这几个内容的一个商成啊,我先把这个删掉。
21:15
那这个运行一下。好,我们已经生成好了,我们来看一下我们刚才说的,第一就是列名,嗯,那个类的下划线转通风,对吧,这已经成立了,第二呢,就是列名的下划线转通风,对吧?这已经都转过来了,好然后再接下来呢,就是long box注解这块呢,加了一个data塔啊加了一个data塔,好,那这块呢,是我们所说的long b,然后再接下来我们看这个。这块呢,叫logic delete field name叫做逻辑删除字段名,那么我们呢,在我们的数据库表当中呢,设计了一些逻辑删除字段,比如说这个地方有个is delete,我们说呢,它是可以完成逻辑删除功能的,比如说零呢就是未删除,一呢就是已删除,然后这面呢是TEN1是吧,那你会发现呢,在我们的这个呃,代码生成的时候啊,像这种字段呢,T1的这种字段呢,它自动给我们生成word类型的了啊所以呢啊,但是这个名字呢,叫is deleted啊,然后之前我们讲过就是这个is deleted呀,最好不要作为就是尤其是这个is呀,最好不要作为我们的实体类当中的属性名的前缀,因为在某一些框架当中呢,这个东西会引起歧义,就不要用is做前缀,尤其呢,是在阿里的开发文档当中,我们找一下阿里的开发文档啊。
22:47
好,这块是阿里巴巴的开发文档。然后这里面呢,就是有一个我搜一下叫is哈。
23:03
找到零个啊,找成一个啊,他在哪呢?它在它的一个。叫第五章买QL数据库啊,MYSQL数据库,然后呢,这里面有一个第一个建表规约,建表规约这个里面呢,有一个叫做啊,有一个叫做强制的一个规约,就是表达是与否概念的字段的时候呢,在数据库表设计的时候呢,要使用is叉叉叉的命名方式,然后呢,Tiny in,然后一表示是零表示否,对吧,数据类型是sign的啊,所以数据库当中呢,我们就这样设计的好,然后接下来呢,我们这个任何字段,如果为非负数,必须是S,这是它就说明,然后注意pogo当中的任何波尔类型的变量都不要加前缀,也就是说都不要加这个is前缀啊,就是我们pogo类的波尔类型的变量不要加is前缀,那也就意味着数据库当中你虽然加了S前缀做设计,但是在pugo当中的这个波尔类型的变量,你不要加前缀,那怎么做呢?
24:06
他说了,嗯。要做这个映射关系,要么你就在这个result map当中去做映射关系啊,然后呢,怎么去做映射关系呢?这个后面我们再说啊,然后我们现在做的方法就是什么,是不是就是直接希望能把这个东西给它删掉啊。用这样的一个形式给他定义啊,啊,那如果用这样的形式定义的话呢,如果除了像他说的这个在result map当中去做映射关系的话,我们是不是还有一个方法。啊,我们还有一个方法,是不是就是在这设置那个注解,然后添加一个呃列名和这个属性名的一个映射就可以了,这个之前我们学过的好,这个怎么做呢?在这个地方呢,我们加这个。后面这个注释啊,后面这个叫做set entity for column remove is,更明确的吧,就是设置实体类当中的布尔列里面的这个,呃。
25:06
Is前缀呢,我要给它去掉啊,所以呢,最后生成的时候呢,是没有is前缀的啊,然后另外上面这个上面这个呢,就是因为我们的is deleted这样的一个列呢,都是逻辑删除字段,逻辑删除字段呢,我们是需要给它加一个逻辑注解的,对不对,所以这个呢,是给逻辑删除字段加逻辑注解啊的这样的一个策略,这个呢是去掉is前缀的这样的一个策略,那我们来重新生成一下代码看一看。好。然后接下来呢,我们来看一下对面。啊,看这面啊看代码。我们看一下这包,你会发现呢,这个is前缀呢,就自动的被去掉了,并且呢,在这个地方和数据库当中呢,做了一个属性名和列名的映射,对吧?然后在这个位置是不是加了一个逻辑删除的注解啊,这个都是我们通过刚才这个策略配置实现的啊,那另外呢,这里面还有一些其他的带有is前缀的,比如说这个is Mary也是一样的,然后呢,他也是在数据库当中,这个人是否已婚哈,在这块呢,Is Mary在数据库当中呢,它也是一个T1这样的一个数据类型,然后呢,这个因为是is Mary用is前缀,所以呢,在我们的实体类当中呢,生成这个属性的时候呢,A前缀就自动被去掉了,但是呢,它会给我们做一个列名的字段名的一个自动的映射啊,所以这块呢,是我们的。
26:42
这样的一个策略,然后接下来呢,我们再来看后面这个restful API风格啊,所谓的restful a呢,就是啊,跟controller相关,这个是它生成的这个controller,当然了,Controller虽然都生成了,但是它没有生成具体的内容啊,因为他也不知道咱们接口到底要定义什么,但是至少呢,他把controller的架构给咱们生成出来了,那我们来看一下这个,比如说像这个嗯,Borrow in for controller吧,它生成的那就是这种borrow in for是吧,然后这块呢,写的是controller啊controller,那我们大家都知道,如果我们要生成restful风格的接口的话呢,那么它一般情况下呢,都是那种返回Jason的,对吧?啊返回Jason的话呢,那我们就需要在controller里面的每一个方法上,比如说我们写一个controller的方法。
27:35
你先随便写点内容啊,那每一个方法上你是不是得写一个瑞斯棒包的呀?啊,那所有的方法当中都有这个response body啊,那取而代之的呢,就是可以在这个地方写一个rest controller,这样的话呢,我后面的所有的方法是不是就可以不写这个responsibility了啊,所以呢,我们来看一下。
28:00
这个策略就是帮助我们去将所有的controller上面啊,用rest controller来替换controller,所以说现在你看到的这上面的都是controller对不对,好我们删掉,然后看一看,好删掉之后呢,我们再重新运行啊。啊,重新运行完成之后呢,我们来看这面这个接口这面我们可以发现上面这个地方是不是都变成了rest control来啊,啊,所以这块呢,就是我们所说的这个最后一个rest API风格控制器的这样的一个策略了,那这些呢,都是我们代码生成器的一些策略哈,这些策略呢,大家在官方文档当中,在代码生成器这个章节当中都可以找到,那在哪找呢?下面。有一个叫做代码生成器配置点进去。
29:07
好,然后接下来呢,我们在这个里面就可以看到很多的策略了,比如说数据源的策略,还有pack in for的策略,对吧,Template的策略,然后在这个里面呢,我们可以看到一些详细的策略,比如说URL怎么设置,Driver name是什么意思啊,所有的这些呢,都可以找到相应的一些说明啊,所以呢,这些呢都可以作为我们的参考,去设置我们的代码策略,那这块呢,是我们的代码生成器。
我来说两句