

前言: 经过苍穹外卖的学习,我们已经了解了最基础的增删改查的企业级应用,在这个项目中我们使用到过Redis,是为了减轻数据库的压力来缓存数据使用的,提高了查询的效率,这里我们会重点学习一下Redis,而学习Redis时,自然而然的引入了另一个重量级项目----黑马点评。这是Redis在企业级项目中的实战,需要我们仔细学习。
由于我们在苍穹外卖中已经有了一些Redis基础了,关于基础的支持我就不再写了,如果有忘记的,或者有需要的,可以看我前面发的几篇文章:《保姆级Redis教程:安装配置+数据类型+命令大全,这一篇就够了》
《从零搭建Redis生产级应用:连接工厂+序列化器+Template保姆级教程》
我们先导入黑马点评的项目到我们的idea中:
我们先把课程资料下载下来,然后放到一个没有中文路径的目录下,然后在里面把黑马点评项目导入idea中,我们可以在idea中新建,然后打开项目。


导入项目之后,我们先打开yaml文件,总览一下:
项目核心配置文件为 src/main/resources/application.yaml,以下参数必须修改,否则启动失败:
server:
port: 8081 # 后端端口(默认8081,勿与前端8080冲突)
spring:
application:
name: hmdp
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL8.0用cj驱动,5.7用com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/hmdp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root # 你的MySQL用户名
password: 123456 # 你的MySQL密码(必须正确)
data:
redis:
host: 127.0.0.1 # Redis地址(本地用localhost)
port: 6379
password: # 你的Redis密码(无密码留空)
lettuce:
pool:
max-active: 10
jackson:
default-property-inclusion: non_null
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰(必开)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开发日志注意: !我们需要把数据库的用户名和密码换成我们自己的,同时,关于redis的host也要换成我们的本地localhost127.0.0.1 ,然后就是我们的mysql的驱动,由于我自己的MySQL的版本是最新版9.6.0,而资料里提供的版本比较低,好像时5开头的,因此这里的mysql驱动就需要更改。
而:MySQL8.0 必须用 com.mysql.cj.jdbc.Driver,5.7 用旧驱动
更新的版本: 因为SpringBoot 会自动配置 MySQL 驱动,完全不需要手动写 driver-class-name,用的 MySQL 9.6.0(最新版) + SpringBoot 2.7+,不写驱动类是完全正确的。
SpringBoot 有 自动配置机制:
url 长这样:
url: jdbc:mysql://localhost:3306/hmdp?xxxSpringBoot 看到 jdbc:mysql 就知道:
所以 删掉 driver-class-name 完全没问题,这是现代 SpringBoot 标准写法。
spring:
datasource:
url: jdbc:mysql://localhost:3306/hmdp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 你的MySQL密码✅ 不用写 driver-class-name✅ 不用写 driverClassName
MySQL 9.6.0(最新版本),比 8.0 更严格,有 2 个坑 大多数的人都会踩:
你的 jdbc url 必须包含这两个,否则连不上 / 乱码 / 时区报错:
url: jdbc:mysql://localhost:3306/hmdp?
useSSL=false&
serverTimezone=Asia/Shanghai&
allowPublicKeyRetrieval=true&
useUnicode=true&
characterEncoding=utf8✅ 必须加:
serverTimezone=Asia/Shanghai(时区,MySQL 9.0+ 强制)allowPublicKeyRetrieval=true(9.0 以上默认关闭,会导致连接失败)MySQL 8.0 / 9.0 统一用这个依赖(不要改版本):
xml
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>SpringBoot 会自动匹配驱动版本,不用手动指定 version。
由于资料里提供了hmdp的sql文件,里面包含了11个项目需要的表格和数据。我们需要把这些表格导入到idea的数据库中。

就是让 IDEA先连本地装的 MySQL 服务 你要填的就这 4 个:
localhost3306root连接成功 → 左边出现你的 MySQL → 这一步才算完。
右键 → 新建数据库
hmdputf8mb4utf8mb4_general_ci最后:才能导入表 选中 hmdp 库 → 运行 SQL 文件 → 选择 hmdp.sql
这里一定要先执行这句,否则必报错:
sqlSET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUT为什么要执行这句: MySQL 5.6及更早版本: 允许使用 '0000-00-00 00:00:00' 作为默认值(称为"零日期")
MySQL 5.7+: 默认启用了 NO_ZERO_DATE 和 NO_ZERO_IN_DATE SQL模式,禁止使用
MySQL 8.0/9.x: 更加严格,完全不支持零日期
执行后,MySQL 就会:允许 0000-00-00 这种时间 → 脚本能正常导入 → 不报错
MySQL 9.6.0 太新、太严格
默认不允许 0000-00-00 00:00:00 这种时间(认为是非法日期)
只需要修改这2个字段:
tb_seckill_voucher.begin_time - 从 NOT NULL DEFAULT '0000-00-00 00:00:00' 改为 NULL DEFAULT NULLtb_seckill_voucher.end_time - 从 NOT NULL DEFAULT '0000-00-00 00:00:00' 改为 NULL DEFAULT NULL其他所有表都不需要修改
修改完成后,重新执行整个SQL文件就可以正常导入了。把0000-00-00字段修改成NULL,无伤大雅,因为这些我们可以在java中轻易判断。
改为 NULL 的理由: 语义正确: NULL 表示"未知"或"未设置",比零日期更符合业务含义 兼容性好: 所有MySQL版本都支持 代码友好: Java中可以正常处理 null 值
因此之后我们就成功的导入了数据库表格。
这一步比较简单,我们只需要把老师给的压缩包直接复制到不含中文目录的地方,然后在当前目录打开cmd窗口,启动nginx。没什么好说的

启动 Redis:redis-server(Windows 双击redis-server.exe)

之后我们启动后端项目,然后打开http://localhost:8081/shop-type/list,如果页面是:

则导入成功。
直接启动nginx,在浏览器访问 后端 SpringBoot(8081):负责接口、数据、业务 前端 :放在 Nginx 里跑 Nginx 就是前端的 “服务器” 为什么一定要启动 Nginx 因为黑马点评的前端不是放在 SpringBoot 里的 而是: 前端是纯静态页面(HTML、JS、图片) 老师把它打包成了 nginx-html 文件夹 必须用 Nginx 托管 浏览器才能访问 访问地址:http://localhost(默认 80 端口) 你不启动 Nginx →浏览器打开就是:无法访问、空白页、404 页面如图:

结语:如果对你有帮助,请点赞,关注,收藏,你的支持就是我最大的鼓励!
