4.谷粒商城15~19文字版

15、环境-数据库初始化

    前面呢,我们创建好了这么几个微服务,那接下来呢,我们就来看一下我们gulimall的整个数据库设计,那根据数据库设计呢,我们可以使用逆向工程,快速的创建出我们这些基本的增删改查代码,来简化开发,那好,我们这个数据库设计呢,就放在了这个基础篇文档里边,给大家放在了我们这个数据库设计这一块,但这是一个PowerDesigner的,这个文件,大家需要呢,提前来安装软件里边,给大家带的这个PowerDesigner,好,安装好以后呢,我们就直接,打开我们的数据库设计。
    这个数据库设计呢,我们主要区分这么几处,好,这五个微服务呢,分别对应五个数据库,按照微服务,我们这个服务自制,每个人操作自己的数据库,所以呢,跟优惠和营销相关的,放在这个数据库,和商品相关的,我放在这个数据库,这个数据库呢,每一张表,每一个字段是什么意思,我们在这都有中文的注释,包括呢,我们这个库存信息的数据库,我们放在这一块,然后呢,还有我们这个用户信息相关的数据库,表设计,我们放在这一块,包括呢,订单的一些数据库的表设计放在这里,那当然,我们这些表呢,我们现在不先一一分析,等我们用到的时候,我们来分析数据库里面的设计,但是,我们整个设计里边,有一个最大的特点,就是所有的表之间,关系再复杂,不建立外键,因为在我们电商系统里边,数据量超大,做外键关联,是一个非常耗费数据库性能的操作,假设,我们每张表都有几十万几百万的数据,那么每插入删除一条数据,数据库都要对外键进行检查,来保证我们数据的一致性和完整性。
    当然,对我们PowerDesigner软件的使用,如果大家自己想在里面建立一些表,我们鼠标可以放在右边,诶这有一张表格table,我们点一下,那这就有一张表, 那我如何给表里边添加每一列,只需要双击表,那么这一块所有的Code都是我们真正的表名,比如我们t_test,我们这个测试的表名,然后呢,name就是给我们看的,我们可以写中文,欸,测试表,包括呢,如果大家想给表里边每一列定义什么信息,这Comment,当然这是整个表的备注信息,给每一列定义信息呢,可以在这写,所有的name都是给我们自己看的,比如我们可以写这是一个主键,诶,那么Code呢,那真正是数据库里边,对应的列名,比如我们写ID,数据类型,可以在这下拉选择,也可以在这小三点选择,比如我们数据类型呢选择Long integer ,好,包括呢,我们这个是一个主键,那所以说呢, 我们要勾中这个Primary,欸,我们这个主键想要自增,我们可以把这一列选中,如果对某一列的详细信息来做规定,可以来选择这个Properties,点一下,好,我们进来以后呢,可以在列这里边选中,诶Identity,这就是一个自增主键,包括列的详细规则,以及一些约束检查等等等等,我们都可以在这,来给他详细制定规则,而且当我们把这张表设计好了以后,我们还可以点Preview,欸,我们可以看一下,生成这张表的语句,而且呢,如果大家是32位系统,包括安装Java32位的虚拟机,他呢,还可以自动的连上数据库,将这些表创建到数据库中去,那我们现在要把这些表创建到数据库,我们可以选中Database,这有一个Generate Database,我们生成数据库,直接点Preview,我们可以看到所有表信息的预览,欸,我们这oms,代表order management system,订单管理系统,那pms就叫product management system,我们这商品管理系统,等等,sms呢,那就是营销管理系统,包括呢我们的ums等等等等,我们所有的这些表,全部都在这,大家可以把整个表的语句,Ctrl+a,Ctrl+c,来创建一个数据库,来保存它。
    当然我们说了,现在依据我们微服务划分,每一个微服务只操作自己的数据库,所以呢,我们将,整个的SQL语句,我给大家划分出了每一个微服务自己对应的,我们这个oms订单服务的,pms商品的等等,那我们接下来呢,就每一个微服务,创建自己的数据库,并将它的SQL语句,经执行创建出各种表。
     好,我们可以来连接虚拟机,这个虚拟机呢, 我们现在是已经关闭的这个状态,我们使用vagrant命令,可以快速的来启动虚拟机,bagrant up。
【vagrant up】
    我们在这启动或者呢,你在这右键,启动,这都是一样的,好,我在这呢,进行启动,那,等我们这个启动完成以后,我们就可以使用,我们的MYSQL客户端,比如我使用SQLyog,然后呢,连上我们的虚拟机,诶,比如我们地址是192.168,欸我们之前是56.10,好,我使用ROOT, ROOT,好,我来测试连接,欸,我们发现这一块呢连接不上,连接不上的原因我们来看虚拟机启动了没,虚拟机呢这一块已经是启动了,接下来呢,我们使用vagrant命令连上我们的虚拟机,vagrant ssh。
【vagrant ssh】
    好,连上虚拟机以后呢,由于MySQL是装在docker上的,我们使用docker ps看正在运行的,我们这个容器。
【docker ps】
    欸我们现在呢,没有权限,那么sudo docker ps。
【sudo docker ps】
    好,我们发现呢,没有任何运行,但是我们之前已经安装过了,为什么没有运行呢,因为我们每一个安装的镜像最终启动的这些容器,我们docker一启动他都不是自动启动的,那我们想要自动启动,我们可以使用这个命令,首先呢, 我们先来看sudo docker ps -a。
【sudo docker ps -a】
    我们先来看出所有的容器,欸,我们所有的容器里面,我们发现确实有我们的这个redis以及MySQL, 但是他们都不是自动启动的,想要自动启动呢,我们可以使用这个命令,首先sudo,我们必须以管理员权限,我们docker update,我们要更新,更新谁呢,比如我来更新redis,来更新这个redis,更新成什么呢,给一个参数叫--restart,restart=always,欸,我们让他呢,每次都是自动启动。
【sudo doccker update redis --restart=always】
    好,我们加上这个更新语句,我们来重新来运行一下,好,我们继续呢,我们把MySQL也这么一执行。
【sudo doccker update mysql --restart=always】
    MYSQL这么一执行,这样的以后只要我们虚拟机重启,那我们这块呢,都会重新启动,我们可以测试一下,我们虚拟机重启,我们点击重启,来看以后我们的MYSQL以及Redis,能不能自动启动。
    我们现在呢,在这操作,这个连接已经被关闭了,欸,等它重启成功,我们使用vagrant  ssh命令重新连接上来。
【vagrant ssh】
    好,现在连接上来以后呢,我们来重新看一下,sudo docker ps。
【sudo docker ps】
    欸,我们发现呢,这两个在我们虚拟机一启动以后,redis跟mysql都自动启动了。
    接下来,我们来连接上我们虚拟机的MYSQL,我们来测试连接,现在已经是成功的,好,我们来连接上来,然后呢,我们来创建出各个微服务对应的数据库,我们右键,创建数据库,这个数据库呢,我们首先第一个,gulimall,gulimall的我们pms,商品管理系统,欸,我们商品服务呢就对应商品管理系统的这个数据库,好,我们都选中utf8mb4。他能接入UTF8并且呢,能解决一些字符乱码的问题,好,点击创建,同样呢,我们把其他数据库创建都出来。
    我们呢,就创建完了所有的数据库,这订单系统的,欸,这个pms商品系统的,sms这是营销系统的,那么ums是我们用户系统的,包括呢,我们wms我们库存系统的,接下来呢,将我们这五个库,对应的数据表文件,里面的内容呢,我们直接打开,复制,粘贴,给他执行过去,比如我们oms,选中Ctrl+v,一定要复制粘贴过来,如果文件直接拖过有,可能会引起解析的字符编码问题,好,我们直接运行,其他的所有数据库都一样,我们来挨个打开并执行。

16、快速开发-人人开源搭建后台管理系统

    前面呢,我们创建好了各个微服务以及这些微服务对应的数据库,那么接下来呢,按照我们的微服务划分,我们需要创建一个后台管理系统,来操作我们后边,各个服务的后台管理功能, 而且我们后台管理系统呢,也是前后分离的,虽然说,我们做前后分离,但在实际开发中,由于各种原因,可能我们还需要来编写后台管理系统的这些前端代码,如果我们从头到尾来搭建一个后台管理系统,来写他的前端和后端,这是一个非常耗时且繁重的工作,所以呢,我们希望能有一个搭建好的脚手架工程,我们呢,稍加改造,就能直接作为一个后台管理系统,让我们来使用,那么这个工程呢,我们就推荐大家使用我们码云上开源的,人人开源,这个项目。
    我们搜索人人开源,随便进它的一个项目,来到他的主页,它呢分为这么多的项目。首先呢,我们来看,这个renren-fast,和renren-fast-vue,这两个项目呢他是JAVA的后台管理系统,那么他就是搭配的使用vue写的后台管理系统的前端工程,这两个呢,配套起来做了一个前后分离的后台管理系统,我们呢,使用这两个。
    这个renren-security,他也是后台管理系统,只不过呢,它做的不是前后分离的,它是将我们所有的页面使用模板引擎,比如Freemarker,来写在我们的这一个工程里边儿。
    而这个renren-generator,也是我们后来要用的代码生成器,他可以帮我们来生成实体类以及xml,以及我们的vue等等等等,包括我们前端工程要用的这些vue组件,他都能帮我们生成,所以说呢,我们以后在写我们的这个电商项目的时候,那基本的增删改查 ,我们就不怎么写了,我们全部使用这个代码生成器来生成,那我们希望大家更关注的是,我们一些复杂的业务,以及高并发高可用,以及我们更多的一些分布式架构。
    还有我们这个renren-fast-adminlte,他呢,不是基于vue以及element-ui以及()等等这种组件式开发,他呢,就直接是拿html页面,以及配套一些咱们这个前端框架来编写的,如果大家习惯来写html,从html,css,js等这些基本的代码可以使用这个后台管理系统框架,当然如果大家要用vue这种组件式开发,我们可以使用他。
    那我们这个项目呢,我们最终就使用这两个组合,欸,使用renren-fast来做Java版的后台管理系统。而他的前端分离的项目,就是这个renren-fast-vue。
    接下来我们就把这两个项目克隆下来,我们现在克隆renren-fast,我们复制过来,好,我们使用呢,git的控制台,使用git clone命令,好,首先将我们这个,renren-fast克隆下来。
【桌面右键——Git Bast Here】
【git clone https://gitee.com/renrenio/renren-fast.git】
    然后呢,我们再把renren-fast-vue,这个前端克隆下来,来复制一下,我们继续git clone。
【git clone https://gitee.com/renrenio/renren-fast-vue.git】
    好,把这个前端项目呢,也克隆下来。

    那么这个后台管理系统的这个项目,我们把它呢放到我们的这个工程里边,欸,我们这gulimall里边, 这是一个Java项目,我们后来要对它里面进行修改,我们打开他所在的位置。
【IDEA——gulimall——右键——Show in Explorer】
    好,我们直接呢,把这个项目【renren-fast】里边的内容复制过来,复制之前呢,把他的这个里面git删掉,好,然后呢,我们把整个项目,往进拖过来,那我们的这个renren-fast,那就进来了。
    那接下来我们这个renren-fast-vue,这个项目项目呢是我们前端工程,那我们这个前端工程呢,欸,同样我们先把这个git删掉,这个git呢是来源于,啊,人家原来的这个人人开源里边的git地址,我们要最终改成我们的,先删掉,我们这个前端工程呢,我们最终要使用我们的vscode,来打开。
    那我们后来再说,我们先来看我们刚导入的这个renren-fast,同样呢,我们把这个也加到我们的modules里边,这是我们后台管理系统,欸,我们这个renren-fast。
【gulimall——pom——modules】
【<module>renren-fast</module>】
    好,把它加进来以后呢,我们要搭建好他的基本运行环境,要怎么搭建呢,来点进来先看一下,在这个工程里边呢,首先带了一个DB文件夹, 来这是数据库,数据库呢,这有一个MYSQL,我们首先要创建出我们后台管理系统的数据库,那这个表呢,有这么多我们直接CTRL+A, CTRL+C复制,来到我们的数据库,欸,我们使用sqlyog,连上我们的数据库,为我们的后台管理系统呢,专门来创建一个数据库,来我们就来创建一个数据库,我们就叫gulimall-admin,好,这是我们后台管理系统的数据库,我们还是选utf8mb4,好,我们来创建出这个数据库,而表的内容呢,网这一粘,直接执行,这个脚手架工程呢,给我们把基本的要用的所有的代码,包括一些表权限设计都加上了,我们呢,只需要做少量的修改,然后发现呢,这一块成功了,我们来看一下这些表,表里边呢就,那这些呢是我们系统的,比如系统的验证码,系统的配置,菜单,等等,这些信息,这几个呢,是关于定时任务的。
    那我们这块表创建好了以后呢,接下来在(IDEA)renren-fast里边,来修改一下配置文件,配置文件呢,在我们这,我们这application.yml,这yml呢,来指定了,我们端口号用8080,以及指定了我们访问的项目名称地址,包括我们一直往下看,包括有没有使用reids,要不要开启redis等等,来我们来看,主要呢,我们要连上那个数据库,要配数据库,配数据库呢,我们来看默认使用的是dev环境,也就是开发环境,来到application-dev.yml,在这一块呢,有配置我们的数据源,在这块呢它使用阿里的这个Druid数据源,好我们呢需要修改一下数据库的连接地址,以及我们的账号密码等信息,首先我们这个数据库的地址,我们是装在虚拟机上,192.168.56.10,好我们来改一下,192.168.56.10,以及我们刚才创建的数据库,已经不叫renren-fast,我们叫gulimall_admin了,欸,我们创建了这个数据库,我们数据库的账号root,密码呢也是root。
【renren-fast——src——main——resources——application-dev.yml】
【要修改数据库的链接地址,账号,密码】
    好我们把数据库的连接信息修改完了以后呢,我们就直接可以启动, 来测试一下,来到我们这一块。
【renren-fast——src——main——java——io.renren——RenrenApplication】
    好,我们直接在这运行,而且有的些同学呢,刚打开这个项目,可能这一块String都是红的,那是我们这个项目呢JDK没有设置,他这一块呢会提示设置JDK,或者呢大家来改一下项目的这个结构,点一下来到SDK里边,来点一个加号,指定一下JDK,选中一下JDK安装的位置,也可以指定到JDK,指定完了以后呢,点一个Apply,那我们这个项目编译就不会发红了。
    好,那我们呢,现在来直接运行我们这个项目,欸,运行起来,来看我们的这个后台项目,基本有没有搭建成功,欸稍等一下。欸,我们发现呢,它正在启动,欸,我们使用的是这个人人快速开发平台,来稍等它启动,诶我们发现呢,整个都已经启动完成了,那我们这个后台管理系统在8080端口,访问renren-fast就行了,但是我们说呢,这后台管理系统啊,他是一个前后分离的,所以我们只访问这个8080,renren-fast。
【localhost:8080/renren-fast/】
    这是我们这个后台系统,那我们需要前端项目,来跟他建立起连接,来互相发送请求,那我们的前端系统的项目呢,我们就要是使用这个renren-falst-vue,我们之间呢使用VS CODE把它打开,我们两个呢,合起来联调一下,好VS CODE呢,我们直接拖进来,把它打开以后呢,没有使用这个前端项目,因为这个前端项目呢,是使用node以及我们vue,Animation UI等专业的一些前端框架来编写的,所以呢我们要用他,首先得装好我们前端项目的一些运行环境。

    首先呢我们就需要安装node,那么怎么安装呢,我们把前端所有的相关文档都发给大家,在基础篇,在docs里面,在课件里边,我们这前端开发的基础知识我们都发给大家,好,在这一块呢,按照操作,我们先要安装node,node呢我们先来搜索,我们来百度搜索node,来到node.js的官网。
【http://nodejs.cn/】
    在官网呢,我们来找到10.16,来我们就来,安装当前的这个,等它下载来以后呢,我们直接安装即可。我们来稍等。好,保留,我们来直接运行,来点下一步,来接收协议,一般呢我们推荐把它装在其他盘,比如我们来放在D盘,好,我们下一步安装,好,我们这个node.js呢,我们安装完了以后呢,需要做一个配置,首先我们来说这个node.js啊,是前端开发,啊必不可少的一个东西,而且呢,我们这个node.js现在目前主要会用到它里边的这个NP M,这个npm呢,是node.js里边的包管理工具,这npm呢,就类似于我们JAVA里边的maven一样,他能帮javaScript自动下载一些前端的相关依赖。
    那么把这个node.js安装完了以后呢,我们来做一个配置就行了,好我们来稍等他安装,安装完了我们来检查一下,我们进入CMD,我们使用node -v。
【node -v】
    我们先来检查一下,我们这个node.js的版本,好,现在呢是10.16.3,然后呢我们接下来,需要设置npm的,这个镜像仓库位置,您如果我们不设置,所有的前端相关的依赖都会从,欸,国外的网站来下载,这会很慢,有些下载不上,所以呢我们使用淘宝镜像,把这句话呢复制一下。
【npm config set registry http://registry.npm.taobao.org/】
    把这个设置完了,这个node就算是弄完了,来设置,好,设置好了以后呢,我们这个node.js的环境就装完了,并且把npm这个包管理工具也配好,配好以后呢,来到我们这个前端项目里边,我们这个renren-fast-vue,来到我们的控制台,前端项目呢,第一次运行,首先需要使用一个命令,叫npm, npm install。
【打开Visual Studio Code——终端——】
【npm install】
    那么这个命令呢就类似于让maven去来下载我们这个前端需要依赖的所有组件。当然,我们maven是后台的,我们直接运行即可,欸,看到会进行来下载,那他是如何来下载,他要依赖的这些组件呢,其实我们这个里边有package.json,这个json里边呢,就相当于描述了我们这个前端项目每一个依赖,都用什么版本,比如vue用什么版本等等,这一块都有来,好 ,稍等让他下载,下载完后的所有的依赖信息,都会在这个node.modules里边,欸,这都会显示。好,在这一块呢,我们发现没有任何的红色的错误相关信息,那么这一块呢,就下载成功了。
    那下载成功,我们接下来就可以运行这个前端项目,那如何运行呢,来使用npm,rum dev。
【npm run dev】
    我们直接来运行,前端项目运行起来,包括我们这个后台管理系统,来8080端口运行起来,那么来,就可以进行联调,欸,稍等一下,好我们来稍等一下,欸我们发现呢,这一块success成功,那我们整个前端后台管理系统的前端项目,是8001,好,我们来,Ctrl按住,点一下。我们这个前端项目呢,在这就已经展示出来了,那么包括这一块的验证码,所有的请求呢,其实都是发给我们的这里的后台8080,我们可以看一下,当我把这个控制台清了以后,我来刷验证码,点一下,欸,我们发现呢,这一块就会有sql语句,它会在我们这个系统的sys_captcha,这个表里面来找验证码,所以我们呢,我发现这是一个前后整个联调的过程,我们前端系统呢,就给后台发送请求,比如我们想要登录,我们测试登录呢,使用默认的admin ,admin账号,我们【验证码】叫yde8f,e8f,来登录进来,好,那么这个系统呢,就登录进来了,所有的数据,包括管理员列表,这里边呢都是来源于我们数据库的,包括,我们也可以在这来,新增管理员,那么至此呢,我们这个前后联调,就通过了,后来,我们真正需要编写前端代码的时候,我们再来说他里边的一些详细规则。
17、快速开发-逆向工程搭建&使用

    前面,我们搭建好了后台管理系统的前端项目,以及他的后台项目的运行环境,并且呢,将他们两个联调测试通过,接下来呢,我们就使用,人人开源提供的renren-geperator代码生成器为我们每一个微服务生成基本的增删改查代码。
    首先呢,我们需要下载我们这个代码生成器,还是一样,复制代码生成器的地址,我们直接克隆下来,好,我们使用git的Bash控制台,好,我们使用git clone命令,来,将我们这个代码生成器克隆下来。
【git clone https://gitee.com/renrenio/renren-generator.git】
    将代码生成器克隆下来以后呢,我们同时也要导入到,我们这个项目里边,打开我们下载的代码生成器,来找一下,好,就在这。
    首先呢,我们将代码生成器原来的git文件删掉,然后呢,将我们这个代码生成器,完整的项目,导入到我们【IDEA】这个里边【gulimall】,好,我们来打开它的所在文件夹。
【gulimall——右键——show in Explorer】
    我们直接,复制进去,来到我们的IDEA里边,欸,我们看到呢,这个代码生成器现在项目已经进来了, 我们将这个代码生成器工程,同样的加到我们这个module里边,好,module,来找到我们的renren-generator。
【IDEA——gulimall——pom.xml】
【<module>renren-generator</module>】
    然后呢,我来直接运行,我们这个代码生成器工程,来,把这一块【maven】刷新一下,好,我们这个renren-generator就已经进来了。
    来直接运行我们这个项目,但在运行之前呢,我们在这呢,来看一下,首先呢,在他的这个配置文件里边,有一个application.yml,那这个yml呢,就要修改一下,我们需要连向哪个数据库进行逆向生成,那我们这个数据库地址呢我们来写一下,是我们虚拟机192.168.56.10。
    然后呢,我们是来连向,我们来看一下,我们呢先来生成pms,比如我们这个商品系统的,那我们就来连向pms,然后呢,接下来,我们来把帐号密码填上,ROOT, ROOT,好,那代码生成器要使用呢,首先在这一块,欸,我们就填好了。
【修改application.yml文件——
修改url,username,password

    接下来第二处,在代码生成器properties里边,欸,这呢,还有我们的包名,等等这些,那我们将这块呢,也修改成我们项目要用的。
    首先这个mainPath,这就是主要的目录,主目录呢,那都是com.atguigu,那这一块,包名呢,那都按照我们这个规范,都必须写成com.atguigu,来找一下,atguigu,然后呢,我们每一个微服务的包名都是com, atguigu ,再加上guilimall,再加上自己微服务的这个模块名,所以呢,我们这一块还是写gulimall。
    然后呢,接下来,这有一个模块名,那模块名呢,每一个模块,叫什么名字那么我们就在这来写上,我们第一个微服务呢,是product商品模块,比如呢,我们来写一个product模块名。

mainPath=com.atguigu
#包名
package=com.atguigu.gulimall
moduleName=product


    然后当然还有作者,诶,比如我们写,我们自己的信息,比如,好。

#作者
author=zhuhongping
#Email
email=zhu26417@gmail.com 


    然后呢,包括这有一个表前缀,我们现在呢,修改我们的逆向工程的配置,我们是连向pms,我们这个pms呢,这个数据库,对应的每一张表,这个前缀呢,都是以pms开头的。如果我们写了表前缀,那么每一张表对应的javabean,就不会以加上咱们这个前缀了,所以呢我们就可以,来给这一块指定上表前缀。那当前,连接的,是我们这个pms系统,那所有的表呢,都是以pms开头的。

#表前缀(类名不会包含表前缀)
tablePrefix=pms_

    好,那我们把这一块的逆向工程,就稍微配了一下,然后我们直接启动,来看效果,我们在这,RenrenApplication里边,好,我们来打开,好,我们来稍等一下,结果,我们发现呢,他现在已经在80端口,进行启动了。

    我们来直接访问我们这个项目。欸,现在呢,这就是我们的代码生成器。来到我们的renren-fast里边,我们看到呢,他这一块有表名,我这边让他每页显示50个,相当于呢,他将我们pms这个数据库的所有表都展示出来了,那我们想要逆向生成哪张表,可以选, 那我们现在要逆向所有,那我们把所有的表呢都一勾选,我们点一个生成代码,他将所有生成的代码,都给我们下载成了,一个压缩包,诶,这个也很方便,我直接呢,打开这个压缩包,来看一下,里面是什么内容,我们将这个压缩包的内容呢,比如我们直接解压到,解压到我们的桌面上,来看一下,我们让他放到桌面的,比如我们这个renren文件夹里边,好,我们直接立即解压。
    我们接下来呢,看到桌面上这个解压的文件夹,这个文件夹呢,逆向生成的代码,啊,有很多,这SQL语句呢,我们后来说,我们现在呢,来看这个main,main里边有java和resuorces,我们来看,rensuorces里边呢有mapper,那么这个mapper呢就是我们这个逆向工程生成的。所有的mybatis的这个mapper文件, 我们来打开看一下,欸,就是这些,然后呢,包括,我们的这个里边,除了在resources目录下有东西,在Java目录下都有我们生成的代码,包名呢是按照com.atguigu.gulimall,欸相当于按照我们当时指定的这一块来。
    按照com.atguigu.gulimall,然后呢,加上什么,加上我们的这一个模块名,看,product,我们的模块名,然后呢,他将controller、dao、实体类、service全部生成了,所以呢,我们可以直接,将这些生成好的整个文件,欸,我将整个main文件夹,我们来复制粘贴到我们对应的微服务里边,我们是专门为,product微服务生成的,我们来Show in Explorer,以文件夹的方式打开,好,我们之间呢,来到src,我们把我们生成的mall,给这粘贴, 好,然后呢,就会多出一些内容,我们来看一下,我们直接在这一块来看一下多出了内容,我们粘过来呢,首先多出了这个src,views,这些里边呢,这生成的这些vue文件,相当于呢,连我们前端代码都帮我们生成了,欸我们这现在呢,目前用不到,先把它直接删掉。
    好,然后呢,我们再来看,在这里边,controller,dao,entity,service都有,欸,我们来看它生成的service, 我们这个service呢有接口,也有实现类。但是我们发现,默认生成的这些代码呢,有报错。还不能用。因为呢它要导入一些,这些类,首先呢,它希望从com.atguigu里边,来导这几个工具类。包括呢,还有这几个,这几个呢是使用mybatisplus导入的类。所以说呢,我们可以给微服务引入mybatisplus的相关依赖,当然,这两个工具类呢,其实,在我们的这个renren-fast里边已经有提供,我们来找一下。我们来,这呢有一个common,utils,我们能看到呢,这有配置utils, 配置utils,它需要的呢是这个【PageUtils】,包括呢Query,它需要的呢也是这个,也就是说呢,等等等等,在我们刚逆向生成的代码里边呢有好多东西,公共的一些类,都还没有,我们来看一下,service里面没有的,实体类里边包括要标注一些注解,那这个注解呢,是lombox的,欸,是我们这个lombox的,我们后来会需要它,我们先放在这。包括呢,我们这个dao,这是mybatis的相关的接口。欸mybatisplus相关的接口,mybatisplus的依赖,也没到,然后呢,包括controller,我们来看,controller里边呢,还有这些注解,RequiresPermissions,这个注解呢,是shiro的一些权限注解,那么,这个呢,我们先也没有导,而且我们用的权限框架,是Spring Security,包括呢,我们每一个controller要返回一个R,相当于响应对象,那么这个东西呢,我们也没有,那像这些公共的一些工具类,包括我们公共的依赖。我们都没有。

    那我们呢,就直接在这里边【gulimall】,来创建一个gulimall-common,我们将后来每一个微服务需要的东西呢,我们都给它写在我们公公里边。我们呢就叫gulimall-common,好,我们呢直接Next,创建出来。
【在gulimall里边创建一个maven项目——gulimall-common】

    那我们最终呢,希望的是,每一个微服务的,一些公共的类,包括一些公共的依赖,等等我们放在common里边,让每一个微服务呢, 都来依赖common,那这一块的这个模块名呢,它稍微有点问题,我们Shift+f6,来修改一下这个模块的名字,这个模块名呢,它中间少了一个横杠。不是我们预期的,好。
    现在呢,这个gulimall-common就来承担我们这个作用,描述一下,description。然后每一个微服务,微服务,公共,公共的咱们这个依赖。以及bean,包括工具类啊,工具类等,都放在这个,这个项目里边。
【gulimall-common——pom.xml

<description>每一个微服务公共的依赖,bean,工具类等</description>


    那每一个服务呢,就来独立依赖这个项目就行了,好,每一个服务呢,都在这,上来就别的依赖先不说,上来就先来依赖,我们这个common。gulimall-common。

gulimall-product——pom.xml
在dependencies下加上
<dependency>
    <gorupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>



    好,然后,我们给common里边先来加上每一个微服务,要用的一些公共依赖。好,我们来到common里边。
    首先呢,我们来写上<dependencies>,需要哪些公共依赖呢,我们先来看逆向生成的这些代码里边,缺了什么,除了缺的那些,我们这些java bin以外,我先来补全这些。
    首先呢,这个是一个权限注解,这是shiro的,那我们这个呢,先不说,那我们comtroller放在这,我们后来用来Spring Security,来在,dao层,dao呢,首先大家都在用mybatis,而且呢,我们现在用mybatisplus比较多,所以呢,我们现在呢,在这一块先导入,dao层,我们使用mybatisplus,来作为我们这个dao层的一个技术。
    好,我们来,去网上来搜索我们的mybatisplus,将它的依赖,导进来就行了,mybatisplus,她的详细使用呢,大家都可以参照这个官方文档,好,我们先来把这个,我们在这有一个安装,把mybatisplus先拿到,然后呢这是mybatisplus跟springBoot整合的starter,我们可以直接复制过来,使用就行,好,这是第一个公共依赖,我们先呢,导入mybatisplus,那导了以后呢,那我们这个dao层那就不会报错了,诶进来,BaseMapper,这都是mybatisd的,那就OK了。
【https://mp.baomidou.com/】

<!--    mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

    然后呢,接下来我们继续来导入,dao层不报错以后呢,再来看实体类,entity,entity里边呢,首先这个TableName,TableId,这都是mybatisplus的一些注解放在这,这还有一个呢Data,Data呢他是lombox的注解,所以呢,我们现在这来,再来导一个依赖,这个依赖呢,叫lombox,好,然后呢,我们就用1.18.8这个版本,这直接有提示。

<!--        lombox-->
    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>


    这个是一个什么技术呢,大家还记得我们之前给IDEA里边装过一个这个插件,他呢,可以简化我们Java bin开发,我们可以看一下生成的这些实体类,这实体类呢,首先TableName对应的相当于这个实体类,对应的是我们这张表,然后呢,实体类的属性,我们发现呢,没有任何的get set方法,因为呢,我们有一个注解叫@Data,只要我们装了这个插件。那么在编译期间,插件就会自动的(),添上get set方法,相当于省得我们去来写各种get set一大堆了,好,那我们把,这个问题又解决了。
    来看service里边,service里边呢,我们发现呢,这些ServiceImpl,也都有了。那现在就剩了,一些公共的一些类,这些公共的类呢,其实都可以在,我们以前的这个renren-fast里边粘贴过来就行了,好,我们现在呢,就将这些公共的类粘过来,首先在common里边,我们先来看一下,这所谓的,所有的公共类,都在com.atguigu.common这个包下,utils下。
    好,我们希望呢,是这样子的,那我们直接创建一个包,那包名呢,我们就按照我们的这个要求,com.atguigu.common.utils,点一个。
【在gulimall-common——src/main/java——创建包——com.atguigu.common.utils】

    接下来,我们这是包名,这两个基本的工具类配置utils,和Query,我们来,从这一块复制过来,从renren-fast里边, 来找一下他的这个工具类,这有一个配置Utils,Query,好我们先把这两个复制过来,复制, 好。
    我们来稍等一下,这两个复制过来以后呢,我们可以接下来继续看我们这个product,product里边,看一下它的这个报错。有没有解决掉一些呢。好,我们发现呢,现在service里边,整体呢,全部都不报错了,因为我们把这两个工具类,诶,这个Query,以及我们的这个配置Utils也都导进来了,但现在呢,就剩controller了,来看一下,controller报错呢,集中于,有一个类,叫R,那这个R呢,那就是respone RESPONSE响应返回的。在我们renren-fast里边,也会有,那我们直接就拿过来,来找一下,common里边Utils,好,这还有一个R,来复制过来,复制过来呢, 我们也直接放到common里边,好粘贴过来。
【复制gulimall-fast——src/main/java/io/renren/common/utils——PageUtils和Query和R——复制到刚刚创建的gulimall-common的包里】


    这R有了以后呢,我们来看一下,controller这一块呢,R就不报错了,那controller的这些注解,我们现在就不用了,因为我们后来还要用Spring Security,那这些注解呢,我们可以先删掉,一会再说吧。
【删除报错的注解@RequiresPermissions】

    好,这个R导进来以后呢,发现R里边,还依赖好多东西,比如httpStatus,这个呢,我们来看一下,欸,看到这是apache.http.HttpStatus,那这个呢,其实是httpcomponents这个组建里边的一个类。我们可以呢,来在maven仓库里面,来找一下。

    用过了当然就知道, 他是这个里边的。来我们来找一下,他这个呢叫httpcomponents,这个呢其实是我们apache给我们做的一个,使用Java代码发送http请求的工具。好,那我们就来直接导入这个核心包就行了,我们先直接把它先导进来。保证呢,不报错,那现在呢,是4.4.12版本,好,我们来点进来。把这个复制过来。
【https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore】

粘贴到gulimall-common的pom.xml文件里面
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.14</version>
</dependency>


    我们直接呢,来到我们的common里边,好,我们将这个导进来,这导进来以后呢,那我们的httpStatus就OK了。那R里边呢,这一块就不报错了。那,包括这个Query,Query里边呢,发现还有报错。Query里边呢还缺少了什么,首先呢,这有一个SQLFilter,发现呢,这是人人开源自己写的一个工具类。这儿呢,还有一个叫StringUtils,这是引的apache.commons.lang工具包,那这个common.lang工具包呢,其实在他的这个renren-fast,这个后台工程的pom文件里边。都引过,诶,这个commons.lang, 我们呢,直接把这个复制过来,复制过来,来到我们这个common里边,当然这个版本号呢,我们来跟之前的这个后台项目保持一致,这个common.lang.version 。我是来看一下,是2.6,我们来复制过来。

复制gulimall-fast的pom.xml里边的依赖复制到gulimall-common里边
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

版本号<version>在gulimall-fast的pom.xml里面找
<commons.lang.version>2.6</commons.lang.version>


    好,我们现在呢,在这一块,先把这个StringUtils。现在解决好了。
    接下来SQLFilter,我们就直接也往这复制就行了,直接这个common里边,我们来找一下,这个,这有一个SQLFilter,行,我们把整个这个xss文件夹给这一复制,好,放到我们的这里边。
【复制gulimall-fast——src/main/java/io/common——xss文件,整个复制到——gulimall-common的common里面】

    好,然后呢,在Query里边,好,我们把它先加到版本控制,在Query里边呢,我们来把,我们的SQLFilter,来改一下引用。
【Alt+Enter——Import class】
    好,SQLFilter,现在引进来了,还有我们这个,Constant,这是一些常量,那这个常量呢,肯定也在控,在原来的这个控制台里边,我们来找一下,Utils里边,我们来找,把这个常量直接复制过来,好,来编写很多常量的类,我们也复制过来。
【复制gulimall-fast——src/main/java/io/renren/common/utils——Constant ——复制到gulimall-common的utils里面】

    然后我们来看Query里边,常量也不报错了,来找,这个SQLFilter,SQLFilter, 我们这一块呢,也是导入进来的,那欸,前面的导入进来了,使用我们包名。那就把这个就可以删掉了。
【删除报错的import io.renren.common.xss.SQLFilter;】
    那我们这个Query呢,也不报错了,我们整体的common项目就不报错了。

    那再来到product里边,来看还有什么报错。现在呢,集中到controller里边,那这个controller呢,整个呢,都OK了,现在呢,只剩下我们这个RequiresPermissions注解,这是shiro给我们提供的,那这一删以后呢,我们controller,这个controller就不会有什么报错了。那么其他的controller呢,其实由于生成的时候,都有这个注解,所以呢,其他不报错,但是这个注解报错。

删除gulimall-product里面的controller下的import org.apache.shiro.authz.annotation.RequiresPermissions;

还有注解@RequiresPermissions



    所以呢,我们来调整一下,逆向工程,我们让生成controller的时候呢,先不使用这个东西,我们来看一下我们的这个逆向工程,所谓的逆向工程呢,他的核心都在这一块【renren-generator/src/main/resources/template】,这有一个叫模板,所有生成的controller,dao包括实体类,的生成规则,相当写了一个模板,而模板里边的这些内容呢,都是动态取出来的,我们现在来看我们的这个controller,所有的controller呢,再来生成我们这些东西的时候呢,都加了这个注解,我们呢,就可以放心的把这些注解删掉,但,我呢,先不删,我们呢将它注释掉,我们后来还会有用,因为我们要转换成Spring Security的权限控制。好,我们先把它注释掉。把这个注解呢,注释掉。
    现在我们再来改逆向工程的这个模板,这个模板一改掉以后呢,以后生成的代码都不会有这些内容了,你看代码里面所有的其他东西,都是动态取出来的,然后呢,包括最重要的,把上边的这一块对于这个注解的引用我们也删掉。

将renren-generator/src/main/resources/template/Controller.java.vm文件里面的一些注解注释掉
 @RequiresPermissions

删掉注解的引用import org.apache.shiro.authz.annotation.RequiresPermissions;


    好, 我们把逆向工程呢,相当于重新修改了一遍,然后呢,我们可以重启逆向工程,让我们把controller重新生成一下,好我们来重启一下逆向工程。
    好,重启成功以后呢,我们可以重新来生成一下,好,我们现在呢,来到咱们这个代码生成器,然后呢,我们将所有的表,全部选中,所有的表,全部选中,我们们让他,重新生成。
    那么新生成的这个代码呢,我们最后也放在桌面,好我们现在把桌面之前生成的删掉,我们呢,将新生成的代码,来打开,并解压到我们的这个桌面,好,解压到,我们呢更换目录,放到桌面。还是生成到renren这个文件夹下。
    好新生成的这些代码里边,我们现在呢,只需要使用controller。因为我们对controller的这个模板呢做了一个修改。现在看,新生成的controller,有没有我们那个注解,你看,我们这一块呢,是注释掉了,包括前边是删掉的。那这一块呢,就没有了。所以呢,我们可以直接将我们的这个controller,所有的controller我们替换成我们新的,好,打开我们的这个文件夹。我们只换controller, 我们在这里边呢,将所有的controller全部进行替换。好,这个controller呢,我们就删掉了,然后呢,换成我们新的controller,我们粘贴过来,然后呢,我们来看,新生成的这个controller,现在呢整个东西都没有任何的报错。ok,一切ok。那我们这个逆向工程的整个调整,我们就做完了。

右键gulimall-product——show in Explorer——找到src/main/java/com/atguigu/gulimall/product——controller——删除

将刚下载的新生成的代码里面的controller复制,粘贴到里面

    以后所有的微服务我们只需要依赖common,我们这个通用工程,在逆向了我们所有的代码里边,有基本的分页方法,包括呢查询详细信息,包括保存、修改、删除、就是增删改查,都会有。那我们基本的增删改查呢就依托于逆向生成的东西。当然,如果不够或者生成的这些方法功能不全的话,欸,我们到时候再进行修改,或者自行添加一些新的方法就行。

18、快速开发-配置&测试微服务基本CRUD功能

    前面呢,我们使用逆向工程,为我们的商品服务生成了基本的增删改查代码,那么接下来呢,我们就来测试一下这些代码,测试之前呢,我们先要在我们这个商品服务里边,整合mybatisPlus,因为,我们是使用mybatosPlus来操作数据库,包括生成的这些(),我们来可以看一下,生成的这些实体类呢,都用的是我们mybatisPlus相关的一些注解。
    好,那整合mybatisPlus呢,我们主要分为这几步,我们来记录一下。
    好,我们先要做的第一件事,是来整合mybatisPlus,这个整合mybatisPlus呢,首先第一步,我们当然是导入依赖。这个依赖呢,我们已经将mybatisPlus的所有依赖,我们都导进这个gulimall-common里边,欸,这个common里边呢有一些类还报错,我们一会儿再来解决,主要呢是来导这个依赖,相当于呢,把mybatisPlus的starter,欸,争对与spring,专门这个写的这个starter,我们导进来。这个场景启动器。

    接下来呢,第二步,那么依赖导入以后呢,我们接下来就可以配置了,这个配置呢,我们完全可以参照mybatisPlus的官方文档,在这快速开始里边,快速开始里边有一个配置,那么这个配置呢,其实主要分为几部分,第一部分呢,是来配置我们的数据源,配置数据源,那这个配置数据源,主要就指连向哪些数据库等等,那第二部分呢,才是配置我们的mybatisPlus相关的信息。
    那么这个数据源呢,首先要配置第一步,第一步呢,我们当然首先要导入数据库的驱动,数据库的驱动,这个驱动呢,由于后来的所有微服务可能都要操作数据库,我们将驱动直接写到common里边,好,在这,欸,MYSQL驱动,这个驱动呢,我们一定要看我们数据库的版本,来导对应版本的驱动,来看一下,我们现在这个数据库呢,我们,选中我们的数据库,找信息,在信息里面呢,我们是5.7.27,这个数据库,当时装的是他,那我们MYSQL驱动呢,我们当然就要导这个。
【https://mvnrepository.com/】
    来在maven仓库里边搜一下mysql connector,好,我们来找一下MYSQL的这个驱动【MySQL Connector/J】,来找5.7,但是呢,我发们现这没有5.7,是5.1,还有MySQL6、8等等,也就是说呢,这些驱动,其实没有真正对应于我们这个MySQL Server:5.7.27的,其实呢, 在官方是这么来解释的,我们可以来到MYSQL的官方这一块位置,官方这一块位置呢,是这么来说的,其实呢,你选8.0相关的版本,或者呢5.1版本,他们呢,都能适配MySQL,的这些5.6点几,5.7点几,8.0点几都行,其实呢,你选5.1的相关版本,8.0的相关版本都行,而且呢,他们是兼容MYSQL5.6到8.0的所有版本,包括呢,也支持JRE1.8等等等等,特别呢,这一块,推荐他们呢,欸,他们呢是全适配的,推荐呢,我们使用咱们这个8.0相关的,所以呢,我们就直接在这来选中一个8.0.17,比如我们来选中最新的,好,我们把这个驱动呢,复制过来,然后我们放到这一块。
【https://mvnrepository.com/artifact/mysql/mysql-connector-java】

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

粘贴到gulimall-common的pom文件里


    现在我们把MYSQL的驱动就导进来了,接下来呢,我们来看这个common里面其他的这个错误,我们来解决一下,这个错误呢,主要集中于,这有几个类,这类里边要用一些什么,异常,包括呢,这样用Servlet相关的东西,这个Servlet其实属于ServletAPI的,那我们直接就导进来就行了。dependency,好我们就来写一个ServletAPI,javax.servlet,就2.5,而ServletAPI呢一般我们Tomcat里边,都会带的,所以呢,我们这个scope调成provided目标环境已存在,打包的时候呢,就不用带上这个ServletAPI了。

gulimall-common——pom.xml

    <dependency>
          <groupId>javax.servlet</groupId>
           <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
    </dependency>


    那这样的话呢,先让这些ServletAPI不报错,我们来看一下,我们把它重新的导入进来。Alt+Enter键,我们呢将这些ServletAPI都一个一个的重新导入进来,那 这写Servlet API呢不报错,包括这一块,而这个整个类呢【XssHttpServletRequestWrapper】,其实是web里边来防跨站脚本攻击的相关东西,我们可以把这些先删掉,我们用spring security,后来直接能解决掉,好,把这个删掉就行了。
    然后呢,我们来看这个SQLFilter里边,还有这个XSSFilter,同样把那个删掉了,这个也就删掉,直接删掉。

删除gulimall-common——src/main/java/com/atguigu/common/xss——XssHttpServletRequestWrapper文件

删除gulimall-common——src/main/java/com/atguigu/common/xss——XssFilter文件

    然后呢,在这个SQLFilter里边,欸,现在呢,有一个叫RRException这个异常,这个异常呢,也是之前renrenfast里边都有的,我们直接把它呢复制粘过来即可,找一下,这异常RRException,好,我们来复制一下吧,把它放到我们这个common里边,就放到utils里边。

renren-fast/src/main/java/io/renren/common/exception——复制RRException

粘贴到gulimall-common/src/main/java/com/atguigu/common/utils

    然后呢,我们把这个添进来,把这个SQLFilter里边,这个RR异常,我们让他重新导一下,导进来,好,我们来看一下哪里还有没有报错,把它原来的这个RR,好,现在删掉【import io.renren.common.exception.RRException;】。那我们这个common里边呢,目前这一块呢,就暂时没有任何报错了,把这些都导进来。
    好,现在呢,我们给common里边也导入了数据库的驱动,以及mybatis相关的依赖,包括呢,我们将这些异常也都解决掉了,然后接下来我们继续我们的整合流程,我们这个整合流程呢,我们第一步做完,我们也导入了数据库的驱动,接下来我们要配置数据源,配置,我们呢直接来到我们的application.properties里边,但这配置呢,我们推荐使用yml文件,直接创建一个叫application.yml。
【在gulimall-product的resources下创建一个application.yml文件】

    在yml里边呢,我来配置咱们数据源相关的东西。首先呢,我们来配点datasource.datasource: username,password等,那么数据源的,账号,我们是ROOT,密码呢我们也是ROOT,包括我们要连向哪个数据库,欸我们这个url地址,url地址呢,我们是jdbc:mysql://,我们是192.168.56.10,虚拟机的3306端口下,我们的商品服务,我们连上商品服务数据库,gulimall-pms,好我们连上他,然后呢,除了url外,还有咱们的driver-class-name:,我们的这个驱动,驱动呢,我们现在引的就是mysql.jdbc.Driver,这个最新的这个驱动,然后呢,这个数据源我们就配置好了。

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/gulimall_pms
    driver-class-name: com.mysql.jdbc.Driver

    接下来呢,我们再把mybatisPlus整合进来这个,在这个application.yml里边配置数据源相关信息。

    好,那接下来呢,我们来配置第二步,mybatisPlus,mybatisPlus要配置什么,首先,我们要使用第一个注解,叫@MapperScan,来告诉, @MapperScan,我们这个Mapper的扫描,告诉mybatisPlus,我们的这些mapper接口都在哪呢,mapper接口,都在这,把他这个Reference,欸引用,拿来。

gulimall-product——src/main/java/com/atguigu/gulimall/product——dao——右键——Copy Reference——得到com.atguigu.gulimall.product.dao

粘贴到gulimall-product——src/main/java/com/atguigu/gulimall/product——GulimallProductApplication

@MapperScan("com.atguigu.gulimall.product.dao")



    好,我们这个包下呢,全部是我们mybatis的mapper接口,我们让他来扫描,这是第一步, 使用咱们这个MapperScan。
    然后呢,第二步由于呢,我们每一个Mapper,我们还生成了他的这个映射文件,这个映射文件呢,后来如果有自定义方法,有复杂sql,我们都可以在这里面写,所以呢,接下来我们还得配置第二个,告诉mybatisPlus,我们这些映射文件都在哪里,我们的SQL映射文件,位置,那这个如何告诉呢,我们须要来到配置文件中,好,我们全部在yml中,配置文件呢,我们来找一下,mybatisPlus有一个专门叫mapper-locations,好,我们来配置他,那我们在classpath,类路径下,类路径下的哪呢,我们来看,原来呢他这有提示,mapperLocations的一些默认值,比如呢classpath*,mapper下的任意路径下的所有xml,其实我们也就是这个位置,我们可以把这个位置呢复制过来,如果不配,那默认就是在这个位置,来帮我们来找的,欸,那我们再mapper下呢,其实就是我们的所有的映射文件,而这一块的classpath加了一个*,指的呢,是不止扫描我自己的类路径,包括呢,我引用的其他依赖的JAR包,里面的路径,我都一起扫,欸,这classpath*,那现在呢,如果我们写成classpath那只扫描自己的,那精确的呢,我们就可以写classpath,我们只扫描我们自己,类下的这些mapper东西。

gulimall-product——src/main/resources——application.yml

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/gulimall_pms
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml


    这一块配置完了,接下来我们还要配置一个主键自增,我们可以来看一下,现在生成的所有实体类,随便打开一个,那么实体类上呢,在我们这个位置有标注一个注解,欸,叫TableId,这个TableId呢,标注在主键上,说明这是一个主键,只不过呢,默认现在还不是自增长的,欸,这是一个null,我们要呢,调整成我们这有一个叫AUTO,这是我们这个自增主键,那自增主键呢,如果我们每一次来调整,我们需要在每一个类上都来调整,他这个主键是自增长的,所以呢,我们可以在配置文件里边,进行统一调整,我们来到这一块,欸,我们来调整一个什么呢,我们来调整一个叫id,欸db-config.id-type,我们就调整这个,id-type呢,我们使用这个auto让他自增主键,当然,后来等我们数据量一大以后,我们再来做分库分表的时候,我们再来说其他的这些主键生成规则,以及自定义的一些主键生成规则。

gulimall-product——src/main/resources——application.yml

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto



   <!--
1.整个MyBatis-plus
    1)、导入依赖
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
    2)、配置
        1、配置数据源;
            1)、导入数据库的驱动。
            2)、在application.yml配置数据源相关信息
        2、配置MyBatis-Plus;
            1)、使用@MapperScan
            2)、告诉MyBatis-Plus,sql映射文件位置

   -->


    那这配置完了以后呢,我们就可以来做一个测试了,好,我们来到我们这个product的项目里边,我们直接在这单元测试,我们来看一下行不行,诶,这有个单元测试 。
【gulimall-product——src/test/java/com/atguuigu/gulimall/product——GulimallProductApplicationTests】
    我们呢,给它注入一个service,我们来看一下,我们的这个service里边呢,我们来看一下,我们注入哪个service,比如我们就使用这个BrandService,品牌的这个service,BrandService,我们来测试一下它里面提供的增删改查方法,我们看这些service呢,它呢,提供了一个qoeryPage,这其实是一个分页查询,但是他继承IService,IService里面有各种增删改查方法,比如说逆向生成的东西里边,欸,这都有的,IService这也是mybatisPlus提供的,那我们直接呢,在这进行测试就行了,BrandService,我们这个品牌的Serivce,比如我呢想插入一条数据,我们来看,这里边有一个叫save,save里边呢,我们来传一个实体类,那我们就来new一个,new一个BrandEntity,欸我们这个品牌的这个实体类。好,把它呢要插入进去,由于主键自增,那我们呢,就不需要,来给他,给主键的值了,所以我们只需要复制上其他的东西,比如呢,我们这个描述是什么,我们就来赋值两个关键性的数据来测一下,比如咱们这个品牌的名字,好那我们就来写一个品牌的名字,比如我们华为,好,我们把它保存进去,保存成功以后呢,我们来System.out.pringln(),来输出一下,这个保存成功。

单元测试——GulimallProductApplicationTests

@RunWith(SpringRunner.class)
@SpringBootTest
public class GulimallProductApplicationTests {

    @Autowired
    BrandService brandService;

    @Test
    public void contextLoads() {

        BrandEntity brandEntity = new BrandEntity();

        brandEntity.setName("华为");
        brandService.save(brandEntity);
        System.out.println("保存成功......");

    }

}


    好,我们来走一个测试【Run...】,看我们这个整合行不行,好,我们发现呢,刚才控制台打印了一个保存成功,我们来到数据库的这个brand品牌表里边,来看一下表数据,欸,我们发现呢,已经进来了,这个华为,欸,我们这个插入就行了。
    那我们如果想要测试其他的这个功能,诶我把这个先,来注掉,已经有一个插入好了,那我们将来想要测一个修改,那修改呢,也用它提供的,这个方法update,这个update呢,里边传两个东西,他们呢有这几个update方法,按照我们这个ID修改的这update,ById这是最简单的,还,我们先来测一个他,那怎么安照ID修改呢,我们在这需要传一个,这个要修改的这个品牌的()对象,而这一块要按照ID修改,那我们就来set一个,他的ID,品牌的ID,1L,与我们这个Id呢是lang型的,我们写个1L,好,现在呢,相当于我们现在要改1号品牌。 我们要改哪个字段,比如我们把这个品牌,我们相当于,现在我们假设要改一个他的这个描述,欸,那我们就来再给他一个描述,点setDescript(),然后呢,  不需要修改的字段,就不用复制了,需要修改的呢,复制上描述,欸,比如呢,还叫华为。

@Test
    public void contextLoads() {

        BrandEntity brandEntity = new BrandEntity();
        brandEntity.setBrandId(1L);
        brandEntity.setDescript("华为");

        brandService.updateById(brandEntity);
}


    那测试一下,走,欸,我们发现了这块运行成功,我们来看数据库,刷新,我们发现呢这块也进来了,OK,那我们这个修改,也就行了。
    其他的删除等等,大家都可以来测,那主要呢,是我们这个查询,我来给大家测一下,由于这个查询呢,我们后来,要经常做,所以呢,brandService里边有一个叫queryPage,这queryPage呢,这是按照我们的分页进行查询,那我们想要查呢,我们还可以查其他的东西,比如按照ID ,getById,按照ID查,包括呢,我们查出来的结果getMap,将它封装成Map,还有呢,我们查出一个对象,查出哪个对象呢,我们可以使用,传一个queryWrapper,相当于我们这个查询条件,比如呢,我们这getOne,我们可以来查一个我们自己指定的对象,好,我们就来使用getOne查出某一个,如果想查多个,我们还可以用list,这块呢,传的这些Wrapper都是我们的查询条件,好,那我们呢,比如我们要查一个list吧,我们要查多个,那这一块Wrapper要传什么呢,我们要传一个这个,叫QueryWrapper,好,我们的查询条件,查完条件这一块的泛型一定要写成我们的,我们要查什么东西我们就写成什么类型,我们现在呢,要查品牌,我们就要写品牌的这个实体类,那么这个QueryWrapper里边,传什么,这里边呢,我们主要来传一个我们查询条件,当然在后边啊,这查询条件呢,有很多,比如eq,欸,按照哪一个列,哪一列等于哪个值,包括呢,哪一列在哪个集合范围内,或者,包括呢,这有排序还有groupBy等等,各种查询,当然还有我们这个gt,呃,ge,gt,这就是呢(),大于哪个,欸,这是大于等于,包括呢我们这个like等等,所有条件,都在这,我们现在呢,比如我就想按照他的这个ID查询,那么就写一个,叫eq,eq什么呢,某一列等于某个值,比如呢,我这一列,brand_id品牌的ID这一列,那么数据库呢,对应有这一列,等于什么呢,我现在想要查询1号的,那我就写一个1L,想要这一列呢等于这个值,那我们来查呢,返回一个集合,当然实际上呢,品牌ID等于它的只有一条记录,但我们可以遍历这个集合,来看一下,forEach,好,我们来直接进行遍历,遍历的每一项item我们写在这里边,好,我们直接在这一块呢输出我们这个item。

    @Test
    public void contextLoads() {
        //查询
        List<BrandEntity> list = brandService.list(new QueryWrapper<BrandEntity>().eq("brand_id", 2L));
        list.forEach((item)->{
            System.out.println(item);
        });
    }



    好,来测试一下,我们能不能查到我们的这个数据,欸,我们发现呢,我们这个控制台有打印,欸品牌1号,华为,华为,这些信息呢,都是从数据库里边查询到的,那就没问题,那后来的,更多的一些复杂查询,或者什么,我们在写到业务的时候再慢慢给大家分析。
 

19、快速开发-逆向生成所有微服务基本CRUD代码

    前边,我们生成了这个商品服务的所有增删改查代码,接下来呢,我们为其他各个服务都来生成相关的代码,那生成代码呢,我们先来打开代码生成器【renren-generator】,先给进行一些配置,在我们的generator.properties里边 ,好,在这块呢,我们之前是给商品服务生成的,现在呢,比如我们给优惠服务,欸,优惠服务呢,我们把这个模块名先拿过来,我们叫coupon,然后呢,接下来,我们这个优惠服务所有的表,都存在于我们的这个sms系统里边,包括呢,表前缀也叫sms,所以呢,我们把这一块也改成优惠服务对应的所有表,然后呢,再接下来我们优惠服务要连的数据库,我们也进行修改,我们连的呢是sms,好,我们把优惠服务的这块配置修改完了以后呢,我们接下来直接启动逆向生成工程,为优惠服务再来生产相关的代码。好,我们来运行。

优惠服务:
修改renren-generator——src/main/resources——generator.properties和application.yml文件

--------------------
generator.properties修改表前缀和包名

mainPath=com.atguigu
#包名
package=com.atguigu.gulimall
moduleName=coupon
#作者
author=zhuhongping
#Email
email=zhu26417@gmail.com
#表前缀(类名不会包含表前缀)
tablePrefix=sms_
---------------------
-------------------
application.yml修改数据库连接名
url: jdbc:mysql://localhost:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-------------------

    好,我们看到呢,他的80端口已经启动了,然后接下来我们来点80端口,直接访问我们这个代码生成器,他已经呢获取到了我们这些表,在表总,表呢,现在总共有两页,我们让它一页全部显示完成,然后呢,将这些表进行选中,选中以后呢,我们来生成代码,将生成的这些代码我们直接解压出来,复制到我们相应的工程里面,来点,点击打开,直接打开,我们选择解压到,然后呢,将它放到桌面,桌面,桌面里面我们新建一个文件夹,比如我们就叫coupon,好,我们将,咱们逆向生成的代码放在这里边,现在呢,逆向生成的代码已经出来了,我们将所有的这个main文件夹里面的内容,直接复制过去就行,我们找到main文件夹,找到我们的优惠卷,咱们这个系统,然后呢,我们把它打开,好,我们进入咱们这个优惠系统,src里边,好,我们直接复制,那main里边的代码呢,就全部进去了。

生成代码——解压到桌面——复制main——在IDEA——gulimall-coupon——右键——show in Explorer——找到gulimall-coupon/src——粘贴到src文件里面

    我们来在这一块看一下效果,在coupon里边,这有com.atguigu,欸gilimall,包括coupon,controller、dao、service,欸,这块呢,都是我们生成的,包括呢,每一个这个Data,以及TableName,我们将所有的mybatisPlus的依赖,以及(), 等等公共依赖我们都放到了common里边,所以让每一个工程在依赖一下我们的common即可,好,我们在这呢,欸,写一下dependency,gulimall-common,好,这个依赖以后呢,我们将咱们这个【Maven】刷新一下,优惠转系统,好,我们来刷新一下,等他来解析完所有的依赖。

在gulimall-coupon的pom.xml文件
添加依赖
<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>

    来,我发现这块呢,就不报错了,那我们想要测试,因为他已经帮我们都生成controller了,所以呢,我们只需要在这稍微配置一下,我们就可以测试了,src的东西呢,我们先不要。
【删除——gulimall-coupon——src/main/resources——src】

    好,然后呢,我们在这配一下我们数据库的连接地址,等等信息,当然我们希望呢以yml配置为准,好,现在呢配成yml,application.yml,这样呢层次更加分明。然后呢,我们将以前的,商品服务里边的那块配置,跟这块呢基本一模一样,只是数据库的位置变了一下,好,我们复制过来,给这粘贴,欸,我们呢现在连向的是,sms系统。

在resources文件下创建application.yml


spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/gulimall_sms
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto


    我们直接启动进行测试,我们启动优惠券服务的主程序,好,我们呢,将他运行起来,这个逆向生成的controller里边,好,我们比如发一个请求,叫coupon/coupon,list,这相当于是来,获取所有的优惠券列表,当然我们现在数据库里边,没有什么优惠券,我们看一下获取到的结果。我们发现呢,现在8080端口已经启动了,好我们来点击,我们现在呢,就来访问一下,我们生成的controller的,叫coupon/coupon下的,我们来看一下,这块有一个叫coupon/list,欸,他这个路径呢,标准呢是模块名,加上我们当前的这个表,对应的我们这个功能名,好,那现在呢,回车。
【localhost:8080/coupon/coupon/list】

    欸,她帮我们进行查询,由于我们没有任何数据,所以查到的结果list空的,当前包括总记录数0个,每页显示10个,总页码0个,当前第一页没有任何数据等等,那我们优惠券呢,就生成成功,也测试通过了。

   那接下来,同样的来,生成其他系统,比如我们接下来生成,会员系统,那生成之前呢,还是先来修改我们代码生成器。
    首先呢,让他连向我们的会员系统,会员系统呢,在我们数据库,叫ums ,ums,好那在这呢,写上ums,然后呢,再来到逆向工程里边,调整一下,我们这个会员系统的模块名,我们叫member,好,那我们就叫member,会员系统,然后呢,接下来,我们的表前缀我们是ums开头的,可以确认一下,在这,好,ums开头的。
    然后呢,接下来,我们来逆向生成,重启一下我们这个,RenrenAppilcation,好,我们直接在这,选中,Rerun,把它重启一下,重启完了以后呢,我们在这重新给它生成相关的表数据,我们稍等它启动成功,好,我们在这测试一下,现在呢,已经连向ums表了,共一页,那就是这么多的表,点击,生成代码,这些代码下载来以后呢,我们直接给他解压,并复制到相应的工程里,好,我们来打开,解压到,我们放到桌面,桌面上我们再来建一个我们的member,会员系统生成的相关数据,好,解压,将我们打开的这个main,文件夹,复制,直接放到我们的这个member系统里边,好,来打开, 我们来到src里边,Ctrl+v,我们把main复制进去,同样的,member系统里边呢,点开,我们来确认一下,确认一下,controller、dao、实体类以及service都有了。包括呢,每一个东西都需要,我们依赖common,所以我们在每一个系统里边,咱们的member,这个服务里边,我们也依赖common,gulimall-common, 好了,然后呢,这个member就生成好了,那我们现在来编排一下,如果我们现在member,在配置文件中,我们不说这个,端口号,那默认用8080,那我们现在呢,数据库,我们先配上,application.yml,来,我们把之前的,优惠券服务的数据库的这些配置,我们直接复制来,CTRL+A, CTRL+ C,然后呢,我们给main这,一粘贴,那我们现在呢,叫ums,好。

会员系统:


1.修改包名和表前缀
renren-generator的generator.properties文件
#包名
package=com.atguigu.gulimall
moduleName=member

#表前缀(类名不会包含表前缀)
tablePrefix=ums_


2.修改数据库连接名
application.yml文件
url: jdbc:mysql://localhost:3306/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
  

3.启动,访问逆向工程,生成代码  
生成代码——解压到桌面——复制main——在IDEA——gulimall-member——右键——show in Explorer——找到gulimall-member/src——粘贴到src文件里面


4.添加依赖
<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>


5.配置application.yml文件
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/gulimall_ums
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto


6.运行,访问
localhost:8000/member/growthchangehistory/list



    然后呢,接下来,我们在这主要来配一个,来编排一下每一个人的端口。那我们从我们的coupon开始,好,我们将所有的,都先停掉,从coupon开始,这个呢【gulimall-common】是一个微服务,这只是一个公共依赖,那从coupon开始呢,他的端口我们就从7000开始,他呢是7000,然后呢,member就是8000,继续往下,下边呢,就是,order就是9000,来看一下,order这一块什么都没写,我们正好都来创建好,application.yml,我们来配好端口,order是9000,然后呢,接下来我们的商品是10000,我们在下边配置上,server: port:10000,然后呢,我们接下来这个ware,库存系统呢我们就是11000,application.yml,好,server: port:11000,包括呢,我们这样配置呢,好处就是,如果以后,order,像order系统,它要复制多份,那多份的order系统呢,都是九千多少,9001,9002,9003,所有的order系统都是9000端口排列出来的。然后呢,所有的member系统都是8000端口,8001,8002 8003,那,这样呢就比较整齐。

gulimall-coupon端口:
server:
  port: 7000

gulimall-member端口:
server:
  port: 8000

gulimall-order端口:
server:
  port: 9000

gulimall-product端口:
server:
  port: 10000

gulimall-ware端口:
server:
  port: 11000

    回头继续将我们的member配置完,我们来看,member呢,我们这个ums已经配置完成了,包括他是8000端口,来启动测试一下。好,我们在这呢启动。好,我们稍等一下,这一块只要出现了端口号,说明就启动成功了,好,我们来,点一下这端口号,先访问8000端口,欸,我们随便访问一个controller来测试一下,controller,好,那我们就访问这个,CTRL+C,复制过来,叫member,他的成长积分历史,包括呢 我们来给一个list的,让它分页查询,欸,现在没有任何数据,那这个会员系统,也生成成功,并且测试通过了。
【localhost:8000/member/growthchangehistory/list】
    接下来,再来其他系统,订单系统 也一样,我们先来改我们的代码生成器,大家呢,就可以依次,来这么来操作了,先来修改我们的application.yml,同样的,我们现在呢,订单系统我们要连向oms,来确认一下,欸,oms,然后呢, 订单系统呢,所有的表前缀,也都是以oms开头的,好,我们在generator里边也配置一下,oms开头的,包括呢,我们现在是order模块,gulimall-order,好,我们现在呢是order模块,把这块配置好呢,我们继续逆向生成,来把这个RenrenApplication,让他重新运行起来,好,我们来访问我们的逆向工程,来,刷新,现在呢,全部连向我们这个订单系统了,来,选中这些表,总共一二,好,然后呢,它将这些代码下载来,我们来打开,将代码粘贴到我们的订单服务里边,直接打开,解压到,我们放到桌面的订单服务,桌面,专门创建一个文件夹,叫订单服务,好,我们点个确定,好,解压完以后呢,把main文件夹整个复制过来,我们放到订单服务里边,订单服务里边,好,show in Explorer,进去,src,好,Ctrl+v,粘过来。
    那在这个订单服务这,复制好了以后呢,来确认一下,在订单服务里边,好,controller,dao,也都有,包括订单的,yml里边,也配上他连的数据库等等信息,好,我们去其他的服务,比如会员服务里边,我们将数据库的相关配置,继续复制过来,Ctrl+C,复制来,来到我们这个订单系统里边,欸, 订单系统呢,同样也要导入我们的common模块,我们来到订单系统,导入我们的common模块,dependencies ,gulimall-common,好,然后呢,他的这一块就不会报错了,让我们接下来,直接来,启动订单服务,来进行测试,运行,订单服务呢,我们也给他编排到了,9000端口,那我们比如打开某一个,controller,我们就叫order/order/list,查看所有订单的,来稍等一下。好,我们点击9000端口,我们访问order/order/list请求,欸,我们发现呢,这一块,ums,oms这张表表不存在。所以我们这个订单系统的这一块,我们没修改到oms上,好,我们让它重新运行,把这复制过来呢了,一定要记得修改, 向,自己的数据库地址。好,重启,我们重新测试一下。好,现在呢,也查出了,欸没有任何数据。现在我们这个测试就成功了。
【localhost:9000/order/order/list】
    那用同样的方法,去来生成我们的库存系统。好,我们接下来,去来生成我们的库存系统,商品呢,我们已经生成过了,先来修改generator,来,我们来打开库存系统是wms,然后呢,接下来,在这一块,再来修改它的模块名,叫ware,库存系统,库存系统的表都是wms前缀开始的,然后呢,我们来逆向生成它,重新运行Reneren,我们来到代码生成器,刷新一下,好,库存系统呢,这么几张表简单的表,我们先点一个生成代码,我们来打开,将我们的这些代码,同样的解压到桌面,专门来建一个文件夹,叫库存系统,好,解压过来,我们把main文件夹里边的所有内容我们都复制到库存系统里边,在库存系统里边,好,我们直接将main文件夹里的所有内容粘贴过去,然后呢,我们来修改系统的相关配置,首先呢,我们来添上它连的数据库,我们复制上order的这些信息,复制过来,来到库存系统里边,好粘过来,同样的库存系统是连向wms,然后呢,同样也要依赖我们的common,gulimall-common,好,然后呢,我们接下来直接来测试运行我们的库存系统,好,我们这个库存系统,库存系统呢,我们也已经编排到了咱们的11000端口,好,来运行一下库存系统,假设呢,我们来发一个ware/wareinfo/list请求,那让库存系统运行起来,好,来访问库存系统的请求,list,欸,我们发现呢,也查询出来了没有任何数据,那我们整个呢,个个微服务,我们为它们逆向生成了相关的代码,并测试通过了他们生成的这些controller。
【http://localhost:11000/ware/wareinfo/list】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤永红

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值