谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

这篇具有很好参考价值的文章主要介绍了谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 导航:

谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客

目录

1、项目介绍

1.1 微服务架构图

1.2. 微服务划分图

2、项目环境搭建

2.1. 虚拟机搭建环境

2.2. Linux安装docker、配置镜像加速

2.3. docker配置mysql、设置自启动

2.3.1、安装mysql5.7

2.3.2、修改mysql配置文件

2.4. docker配置redis并设置持久化

2.5. jdk、maven镜像、idea插件

2.6. vscode的安装、插件、配置

2.6.1、安装vscode和插件 

2.6.3、 禁止运行项目后自动打开浏览器

2.7. 初始化项目架构、创建仓库并提交GitHub

2.7.1、码云创建Maven仓库,git克隆父工程

2.7.2、新建子模块、

2.7.3、过滤上传git的垃圾文件

2.7.4、右键项目提交

2.7.5、创建仓库并推送GitHub

2.8. 导入MySQL数据库表

3、快速开发

3.1. “人人开源”,快速构建后台管理系统

3.1.1、克隆人人开源fast项目

3.1.2、删掉两个文件夹里的.git文件夹

3.1.3、把renren-fast复制到子模块,并加入父工程

3.1.4、renren-fast的pom修改

3.1.5、创建后台管理系统的数据库gulimall_admin

3.1.6、修改renren-fast的配置文件,设置数据库

3.1.7、启动和访问

3.1.8、node.js运行前端项目

3.2. product模块的逆向工程搭建,人人开源代码生成器

3.2.1、克隆renren-generator

3.2.2、删除.git文件并导入到父工程中

3.2.3、修改生成器模块的pom 

3.2.4、修改生成器模块配置文件的数据库信息

3.2.5、修改生成信息generator.properties

3.2.6、controller模板中去掉@RequiresPermissions注解

3.2.7、运行项目并生成代码

3.2.8、解压生成代码并复制到guli-product

3.2.9、新建common模块,解决生成代码报错问题

3.2.10、结果类R使用方式

3.2.11、配置yml和添加mysql依赖,测试CRUD

3.3 其他模块的逆向工程搭建,人人开源

3.3.6、各模块创建yml,设置端口号

3.3.1、修改生成器properties和yml,生成coupon模块代码

3.3.2、复制粘贴生成代码,引入common模块依赖

3.3.3、创建yml,删除resources的src文件夹

3.3.4、运行测试

3.3.5、同方法生成gulimall-member/gulimall-order/gulimall-ware的代码


1、项目介绍

1.1 微服务架构图

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

1.2. 微服务划分图

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2、项目环境搭建

2.1. 虚拟机搭建环境

虚拟机VMware、centos7.

2.2. Linux安装docker、配置镜像加速

查看是否安装docker:

docker
# 1. 卸载之前的docker
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2.需要的安装包
yum install -y yum-utils

# 3.设置镜像的仓库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 默认是从国外的,不推荐
# 推荐使用国内的
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache 

# 4.安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
docker systemctl start docker
# 6. 使用docker version查看是否按照成功
docker version

docker详解:SpringCloud基础3——Docker_vincewm的博客-CSDN博客

配置阿里云镜像加速

因为docker hub是国外网站,需要配置国内镜像进行加速。

1、登录阿里云找到容器服务

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2、找到镜像加速器

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3、配置使用,输入到ssh回车

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://2lxyghvy.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

2.3. docker配置mysql、设置自启动

2.3.1、安装mysql5.7

docker pull mysql:5.7.25

# 运行容器
sudo docker run -p 3306:3306 --name mysql01 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql:5.7.25
# 参数说明 -p 3312:3306 将容器的3306端口映射到主机的3312端口
# -v 宿主机文件目录:容器内目录  将容器内文件挂载到宿主机上
# -e MYSQL_ROOT_PASSWORD=root 设置mysql密码为root
# -d 后台启动
# --name 给启动容器起名字

# 使用docker ps 查看启动的容器

2.3.2、修改mysql配置文件

# 进入配置文件挂载的目录下
cd /mydata/mysql/conf

# 配置文件my.cnf
vim my.cnf

主要修改编码为utf8


# 新增配置文件内容
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve


# 修改配置文件之后,重启容器
docker restart mysql01

设置自启动: 

docker update mysql01 --restart=always

2.4. docker配置redis并设置持久化

如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中。

# 1、创建配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
# 2、下载镜像
docker pull redis

# 3、启动容器
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data  \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf


# 4、进入redis客户端
docker exec -it redis redis-cli

修改redis配置文件

vi /mydata/redis/conf/redis.conf

aof持久化方式、或设置密码,如果配置后无法打开redis,尝试删除注释

appendonly yes
#requirepass xxxxxx # 配置redis密码

# 保存
docker restart redis

# 进入redis客户端
docker exec -it redis redis-cli
#auth xxxxxx #如果有设置密码

回顾aof和rdb持久化方式:

SpringCloud基础7——Redis分布式缓存_vincewm的博客-CSDN博客

设置redis容器在docker启动的时候启动

docker update redis --restart=always

安装redis-desktop-manager-0.8.8.384并连接

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2.5. jdk、maven镜像、idea插件

首先安装jdk11、maven

java -version
mvn -version

maven3.6.1下载:

https://maven.apache.org/download.cgi

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

在/usr/local/ 下上传:

cd /usr/local/ 

解压:

tar -zxvf apache-maven-3.6.1-bin.tar.gz

配置maven的阿里云镜像、jdk11

cd apache-maven-3.6.1   #进入apache-maven-3.6.1目录
mkdir ck    #创建ck目录
cd conf            # 进入conf目录
vi settings.xm # settings.xm文件

修改对应标签:

  <mirrors> 
	<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
  </mirrors>


 <profiles>
    <id>jdk-11</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>11</jdk>
    </activation>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
    </properties>
  </profiles>

IDEA安装插件mybatisX。

2.6. vscode的安装、插件、配置

2.6.1、安装vscode和插件 

下载地址Download Visual Studio Code - Mac, Linux, Windows

vscode用于前端管理系统,在vsCode里安装以下插件

  • Auto Close Tag
  • Auto Rename Tag
  • Chinese
  • ESlint
  • HTML CSS Support
  • HTML Snippets
  • JavaScript ES6
  • Live Server
  • open in brower
  • Vetur

2.6.2、关闭Eslink强检查

打开vue项目/build/webpack.base.conf.js,注释:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

这样就能少去很多没必要的报错,例如.vue注释空格报错

2.6.3、 禁止运行项目后自动打开浏览器

vue项目运行命令npm run dev导致自动打开浏览器

解决办法: 

1、在config文件夹找到index.js文件夹
2、把autoOpenBrowser: true
3、改为autoOpenBrowser: false 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2.7. 初始化项目架构、创建仓库并提交GitHub

我项目初始化的时候,没有按照雷神用Spring Boot Initilizr。而是按照周阳在springcloud课程里面手动依赖管理的方式初始化的项目。

2.7.1、码云创建Maven仓库,git克隆父工程

码云创建Maven仓库

设置Maven开发模板;分支类型为“生产、开发模型” ,使开发分支时用dev分支,发布后使用master分支:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

通过仓库地址克隆项目到本地:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2.7.2、新建子模块、

  • gulimall-xxx(product/order/ware/coupon/member)
  • 每一个子模块的包名为com.xmh.gulimall.xxx(product/order/ware/coupon/member)
  • 并在每个子模块下引入web、openfegin

新建maven模块 gulimall-xxx,导入依赖pom.xml

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

导入依赖

    <dependencies>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

父工程的pom.xml,并把父工程添加到maven

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2.7.3、过滤上传git的垃圾文件

  • 点开父工程的.gitignore文件,添加如下内容
**/mvnw
**/mvnw.cmd

**/.mvn
**/target/

.idea

**/.gitignore

也可以直接把这些文件删除,这些文件是用不到的 

2.7.4、右键项目提交

先右键项目-git-add,然后提交本地库谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

填写提交信息、点击commit

2.7.5、创建仓库并推送GitHub

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

2.8. 导入MySQL数据库表

注意:所有数据库表是没有外键的,商城项目外键复杂影响性能。

0.使用powerDesigner设计表:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

1.创建数据库gulimall_oms,gulimall_pms,gulimall_sms,gulimall_ums,gulimall_wms,基字符集选择utf8mb4

2.使用Navicat或SQLyog分别创建五个数据库,编码utf8mb4。

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

 3.双击打开数据库,新建查询,将sql语句复制粘贴运行:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

随便点开一个表,发现没有中文乱码:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

注意:不能将对应sql文件拉进点开的数据库自动运行sql语句,因为sql文件编码是gbk,直接拖进去会导致中文乱码

3、快速开发

3.1. “人人开源”,快速构建后台管理系统

3.1.1、克隆人人开源fast项目

码云上搜索人人开源,找到renren-fast(后台管理系统的后端),renren-fast-vue(后台管理系统的前端), 克隆到本地。

人人开源

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

  • renren-fast是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付
  • renren-fast-vue基于vue、element-ui构建开发,实现renren-fast后台管理前端功能,提供一套更优的前端解决方案
  • renren-security是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付
  • renren-generator是人人开源项目的代码生成器,可在线生成基础增删改查相关的entity、xml、dao、service、html、js、sql代码,减少70%以上的开发任务,

克隆:

桌面右键git bash克隆两个项目:

git clone https://gitee.com/renrenio/renren-fast.git
git clone https://gitee.com/renrenio/renren-fast-vue.git

3.1.2、删掉两个文件夹里的.git文件夹

3.1.3、把renren-fast复制到子模块,并加入父工程

把后端renren-fast文件夹复制到谷粒商城项目中并加入父工程:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.vince.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>guli-coupon</module>
        <module>guli-member</module>
        <module>guli-order</module>
        <module>guli-product</module>
        <module>guli-ware</module>
        <module>renren-fast</module>
    </modules>
</project>

然后在idea项目结构里设置项目jdk为11,把renren_fast的pom里jdk改为11:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.1.4、renren-fast的pom修改

  • pom.xml报错
'parent.relativePath' of POM io.renren:renren-fast:3.0.0

报错原因:子模块的parent写的并不是子模块的上一级,而是继承了springboot

解决方法:将其他模块pom的parent复制粘贴到renren-fast的pom

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
  • 如果pom.xml之中的plugin地方报错,引入相关依赖
<!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
<dependency>
   <groupId>com.spotify</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>0.4.14</version>
</dependency>

<dependency>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>wagon-maven-plugin</artifactId>
	<version>1.0</version>
</dependency>

3.1.5、创建后台管理系统的数据库gulimall_admin

sql文件在renren-fast/db/ 目录下,找到其中的mysql.sql 复制,运行。

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.1.6、修改renren-fast的配置文件,设置数据库

查看application.yml,发现当前环境为dev

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

修改application-dev.yml, 配置成自己的linux的数据库信息,别忘了数据库名为gulimall_admin:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

 如果报错ssl错误,在url后面加&useSSL=false

3.1.7、启动和访问

http://localhost:8080/renren-fast/

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

测试成功

3.1.8、node.js运行前端项目

安装node.js 

下载地址https://nodejs.org/dist/v10.16.3/,下载之后直接安装即可。安装后检查node.js

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

配置淘宝镜像

npm config set registry http://registry.npm.taobao.org/

设置node-sass版本:

npm install  node-sass@4.14

注意:一定要保证nodejs版本和node-sass匹配,不想浪费时间就下载我前面指定的版本。

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

加载项目依赖并运行项目:

运行vue项目之前,运行npm install命令,加载项目依赖

点击左下角打开控制台、点击终端 :

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

安装npm依赖

npm install

运行项目 

npm run dev

报错解决:

如果npm install卡着不动,重启windows、管理员cmd窗口试试。

版本很重要,建议下载我前面的版本。

为什么运行命令是npm run dev?

在项目目录下,我们可以看到一个名为package.json的文件,该文件是对项目、模块包的描述,在package.json文件中,有一个scripts的字段:

  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js"
  },

修改后运行命令就是npm run serve:

// 运行npm run serve的scripts字段
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },

运行成功:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

访问http://localhost:8001,测试成功,账号密码是admin、admin。

报错解决:

如果不显示验证码是因为后台没有运行成功、检查idea是否数据库报错、检查虚拟机docker ps数据库是否运行。

另外centos默认会隔一两天自动改ip地址,想关闭参考下面文章的2.6:

Linux基础_vincewm的博客-CSDN博客_finalshell 进程查看

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.2. product模块的逆向工程搭建,人人开源代码生成器

3.2.1、克隆renren-generator

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

git clone https://gitee.com/renrenio/renren-generator.git

3.2.2、删除.git文件并导入到父工程中

删除其中的.git文件,复制到父工程中,父工程pom.xml中添加代码生成器为子模块 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.2.3、修改生成器模块的pom 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.2.4、修改生成器模块配置文件的数据库信息

修改renren-generator的配置文件application.yml,配置自己的数据源,注意修改数据库名gulimall_pms(生成商品系统)

先生成gulimall-pms商品系统,就数据库名为商品系统的数据库表

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    #MySQL配置
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.xxx.xxx:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
    username: root
    password: 1234

踩坑:ssl报错就在url后面加&useSSL=false、数据库连接出错检查虚拟机开机情况、数据库信息填写错误

3.2.5、修改生成信息generator.properties

这里先配置商品的相关信息:

注意只修改下面内容,其他内容不用变。

#代码生成器,配置信息

mainPath=com.vince
#包名
package=com.vince.gulimall
moduleName=product
#作者
author=vince
#Email
email=xxxxx@qq.com
#表前缀(类名不会包含表前缀)
tablePrefix=pms_

如果引入spring-boot-starter-parent 2.2.6.RELEASE爆红,参考问题2

3.2.6、controller模板中去掉@RequiresPermissions注解

修改src/main/resources/template/Controller.java.vm

删除导入@RequiresPermissions注解的语句

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

注释掉该位置,此处的注释是shiro提供的,我们以后要用spring security

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

注意:这里注释要用//,ctrl+/的注释是#。 

3.2.7、运行项目并生成代码

访问localhost:80,选中所有表,生成代码

选择每页显示30条后,再全选生成 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

注意:如果表备注里中文乱码,重写运行sql文件里的语句, 复制粘贴运行,因为sql文件编码是gbk

3.2.8、解压生成代码并复制到guli-product

解压生成的代码,把mian文件夹复制到guli-product/src下

删除前端代码:\resources\src\(前端文件,用不到)

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

如果之前没有创建application.yml和启动类,手动创建

3.2.9、新建common模块,解决生成代码报错问题

新建gulimall-common的Maven模块,用来引入每一个微服务公共的依赖、bean、工具类等

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

让所有gulimall-xxx的pom引用guli-common的依赖:
 

        <dependency>
            <groupId>com.vince.gulimall</groupId>
            <artifactId>gulimall-ware</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

在gulimall-common引入公共依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>gulimall</artifactId>
        <groupId>com.vince.gulimall</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.vince.gulimall</groupId>
    <artifactId>gulimall-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- 统一管理jar包版本 -->
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <mybatis-plus.version>3.4.1</mybatis-plus.version>
        <lombok.version>1.18.8</lombok.version>
        <httpcore.version>4.4.14</httpcore.version>
        <commons.lang.version>2.6</commons.lang.version>
        <jakarta.validation.api>2.0.2</jakarta.validation.api>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>${httpcore.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons.lang.version}</version>
        </dependency>
        <dependency>
            <groupId>jakarta.validation</groupId>
            <artifactId>jakarta.validation-api</artifactId>
            <version>${jakarta.validation.api}</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.1.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
注意SpringCloud和springboot和版本兼容问题,不匹配就是给后面埋雷,建议用老师的版本或我的版本。我这里版本都是最新的,springboot版本2.7.4,SpringCloud版本2021.0.4,SpringCloudAlibaba版本2021.0.1.0
Release Train Boot Version
2021.0.x aka Jubilee 2.6.x, 2.7.x (Starting with 2021.0.3)
2020.0.x aka Ilford 2.4.x, 2.5.x (Starting with 2020.0.3)
Hoxton 2.2.x, 2.3.x (Starting with SR5)
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version
2021.0.4.0* Spring Cloud 2021.0.4 2.6.11
2021.0.1.0 Spring Cloud 2021.0.1 2.6.3
2021.1 Spring Cloud 2020.0.1 2.4.2

从renren-fast模块的common包下,复制粘贴这些包和类:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

 然后把引入上面这些类的报错文件中,重新导入,例如:

import io.renren.common.xss.SQLFilter;

改成 

import com.vince.common.xss.SQLFilter;

如果第六步没有删除在controller模板中删除@RequiresPermissions注解:

ctrl+x删除gulimall-product里所有controller中的@RequiresPermissions注解

import org.apache.shiro.authz.annotation.RequiresPermissions;
@RequiresPermissions("product:attr:list")

现在所有报错都已经清理完毕。 

如果之前注释了controller模板(在renren-generator的resources-template-Controller.java.vm里)里的@RequiresPermissions注解,这里就不用删除了。

3.2.10、结果类R使用方式

上面解决报错问题后,common模块的utils包下有个结果类R:

public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
		put("msg", "success");
	}
	
	public static R error() {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

controller使用方法:

返回成功数据:

return R.ok().put("data", (Object)"响应的数据");

返回错误数据:

return R.error(500,"错误消息,在msg里").put("data",(Object)"错误数据,在data里,常为List<String>,存多个错误原因");

3.2.11、配置yml和添加mysql依赖,测试CRUD

common模块的pom.xml加入依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

product模块的application.yml

server:
  port: 10000
spring:
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql://xxxx:3306/gulimall_pms?userUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  configuration:
    #数据库下划线和实体类驼峰统一
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto
    banner: false
  #告诉mp,sql映射文件的位置,默认值classpath*:/mapper/**/*.xml。
#  classpath表示只引用现在模块的类路径。lasspath*表示不止引用现在模块的类路径,还包括依赖jar包的类路径
  mapper-locations: classpath:/mapper/**/*.xml

3、测试

  • 新建测试类

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

  • 测试

    @SpringBootTest
    class GulimallProductApplicationTests {
    
        @Autowired
        BrandService brandService;
    
        @Test
        public void testBrand(){
            BrandEntity brandEntity = new BrandEntity();
            brandEntity.setName("华为");
            brandService.save(brandEntity);
            System.out.println("保存成功");
            List<BrandEntity> list = brandService.list(new LambdaQueryWrapper<BrandEntity>().eq(BrandEntity::getName, "华为"));
            System.out.println(list);
        }
    
    }
    

    谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

  • 运行项目,访问http://localhost:10000/product/brand/list

    谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

    同方法测试删改。

3.3 其他模块的逆向工程搭建,人人开源

3.3.6、各模块创建yml,设置端口号

按照字母序从上往下配置,coupon是7000,member是8000,order是9000,product是10000,ware是11000。 

3.3.1、修改生成器properties和yml,生成coupon模块代码

修改生成器配置,模块名和表前缀: 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

#代码生成器,配置信息

mainPath=com.vince
#包名
package=com.vince.gulimall
moduleName=coupon
#作者
author=vince
#Email
email=xxx@qq.com
#表前缀(类名不会包含表前缀)
tablePrefix=sms_

修改yml的数据库名 

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

运行生成器模块,访问http://localhost/

每页显示100条、全选生成:

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.3.2、复制粘贴生成代码,引入common模块依赖

生成coupon的代码,main文件夹复制到工程中,并在gulimall-coupon工程中引入gulimall-common依赖

        <dependency>
            <groupId>com.vince.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

3.3.3、创建yml,删除resources的src文件夹

从product复制过去,只需要修改数据库名字。

server:
  port: 7000
spring:
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql://xxxx.134:3306/gulimall_sms?userUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  configuration:
    #数据库下划线和实体类驼峰统一
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto
    banner: false
  #告诉mp,sql映射文件的位置,默认值classpath*:/mapper/**/*.xml。
  #  classpath表示只引用现在模块的类路径。lasspath*表示不止引用现在模块的类路径,还包括依赖jar包的类路径
  mapper-locations: classpath:/mapper/**/*.xml

删除resources下的src

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

3.3.4、运行测试

访问http://localhost:7000/coupon/coupon/list测试

谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

测试成功!

3.3.5、同方法生成gulimall-member/gulimall-order/gulimall-ware的代码

生成:

修改generator.properties的模块名和表前缀(ums_,oms_,wms_)、yml数据库名、运行生成器模块,访问http://localhost/

每页显示100条、全选生成。

配置生成后的模块:

复制粘贴生成代码,pom引入common模块依赖、yml修改数据库名、删除resources下的src

ware模块多一条,删除这三个实体类和对应的dao、service、controller、resources.mapper.ware

 谷粒商城架构图,Java学习路线,谷粒商城笔记+踩坑,谷粒商城,SpringCloud,项目,java

测试: 

测试member、ums:http://localhost:8000/member/growthchangehistory/list

测试order、oms:http://localhost:9000/order/order/list

测试ware、wms: http://localhost:11000/ware/wareinfo/list文章来源地址https://www.toymoban.com/news/detail-790664.html

到了这里,关于谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【系统开发】尚硅谷 - 谷粒商城项目笔记(七):消息队列

    Docker中安装 下载镜像: docker pull rabbitmq:management 创建实例并启动: 4369 – erlang发现口 5672 --client端通信口 15672 – 管理界面ui端口 25672 – server间内部通信口 在web浏览器中输入地址:http://服务器ip:15672/ 输入默认账号: guest : guest overview :概览 connections :无论生产者还是消费者

    2024年02月12日
    浏览(36)
  • 【系统开发】尚硅谷 - 谷粒商城项目笔记(五):分布式缓存

    引入redis依赖 配置redis 堆外内存溢出 缓存穿透 缓存雪崩 缓存击穿 导入依赖 redisson配置类 可重入锁 可重入锁解释 :无论是公平方式还是非公平方式,进门坐下来之后,你可以问医生问题一次,两次,无数次( 重入),只要你还坐着,你都可以问,但是一旦起身离开座位,

    2024年02月09日
    浏览(45)
  • 【系统开发】尚硅谷 - 谷粒商城项目笔记(十一):K8S

    Kubernetes(k8s)中文文档 Kubernetes概述_Kubernetes中文社区 Kubernetes官网 Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 Kuber

    2024年02月11日
    浏览(40)
  • 【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+面试题汇总+源码

    本文是“Java学习路线”专栏的导航文章,目标是为Java工程师提供一套 完整的Java学习路线 。 目录 0.摘要/资料/代码整理 1.Java基础+进阶 2.MySQL,JavaWeb,Mybatis,前端 3.Git 4.SSM(Spring,SpringMVC,Mybatis)框架 5.Maven高级 6.Springboot,MybatisPlus,JPA框架 7.瑞吉外卖、Redis、Nginx、Linux、mysql主从复制

    2024年02月16日
    浏览(44)
  • 【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+常见面试题+源码

    本文是“Java学习路线”专栏的导航文章,目标是为Java工程师提供一套 完整的Java学习路线 。 目录 0.摘要/资料/代码整理 1.Java基础+进阶 2.MySQL,JavaWeb,Mybatis,前端 3.Git 4.SSM(Spring,SpringMVC,Mybatis)框架 5.Maven高级 6.Springboot,MybatisPlus,JPA框架 7.瑞吉外卖、Redis、Nginx、Linux、mysql主从复制

    2024年02月06日
    浏览(45)
  • 【笔记/后端】谷粒商城高级篇

    全文检索工具:快速储存、搜索和分析海量数据。 Index (索引) → Mysql的库 动词,相当于MySQL中的insert; 名词,相当于MySQL中的Database。 Type (类型) → Mysql的表(过时) 在Index中,可以定义一个或多个类型。类似于MySQL中的Table;每一种类型的数据放在一起。 Document (文档) →

    2024年02月02日
    浏览(33)
  • 【笔记】谷粒商城高级篇

    全文检索工具:快速储存、搜索和分析海量数据。 Index (索引) → Mysql的库 动词,相当于MySQL中的insert; 名词,相当于MySQL中的Database。 Type (类型) → Mysql的表(过时) 在Index中,可以定义一个或多个类型。类似于MySQL中的Table;每一种类型的数据放在一起。 Document (文档) →

    2023年04月21日
    浏览(35)
  • 谷粒商城学习笔记

    1)、电商模式 2)、谷粒商城 谷粒商城是一个 B2C 模式的电商平台,销售自营商品给客户。 1、项目微服务架构图 2、微服务划分图 3、项目技术特色 4、项目前置要求 分布式是指将不同的业务分布在不同的地方。 集群指的是将几台服务器集中在一起,实现同一业务。 例如:

    2024年01月16日
    浏览(39)
  • 谷粒商城项目|es的应用场景及常见问题

    es是什么 es多被用于搜索聚合分析引擎 是分布式的可以高性能查询的引擎 es应用场景 为什么不用MYSQL而用es es将数据存在内存中且可以分布式的存储数据 商品上架 商品在es中的保存 1.在es中建立索引 spu sku spu sku保存在一起防止分布查询 为了防止对象数组扁平化,商品属性字段

    2024年01月17日
    浏览(37)
  • 谷粒商城笔记(详细版) IDEA2021 高级篇1(2022/11/9)

    谷粒商城笔记(详细版) IDEA2021 基础篇(1/3). 谷粒商城笔记(详细版) IDEA2021 基础篇(2/3). ES6 VUE 基础篇前端笔记 谷粒商城笔记(详细版) IDEA2021 基础篇(3/3). [谷粒商城笔记(详细版) IDEA2021 高级篇(第1篇) 索引对应mysql中的库 类型对应Mysql中的数据表 文档对应mysql中的一条条数据 在我们

    2023年04月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包