【Spring boot 项目实践】基于Spring boot 的外卖系统

文章目录

  • 前言
  • 一、后端代码准备
    • 1.实体类
    • 2.数据层
    • 3.业务层
    • 4.表现层
  • 二、用户端
    • 1.登录页面
    • 2.前端页面
    • 3.购物车
    • 4.个人主页
    • 5.订单支付
  • 三、客户端
    • 1.员工管理
    • 2.分类管理
    • 3.菜品管理
    • 4.套餐管理
    • 5.订单管理
  • 四、数据库读写分离操作
    • 1.主从数据库的配制
    • 2.Idea中的配制
  • 五、优化处理
    • 1.前后端通话一致
    • 2.全局异常处理
    • 3.缓存优化
    • 4.Git 项目版本控制管理
    • 5.Swagger Api接口文档
  • 六、Linux 项目部署
  • 七、总结


前言

本文纯粹学习记录,非商业用途。

本文重点记录后端技术总结,采用 Spring Boot + MyBatisPlus 技术完成项目系统的开发。并通过Linux 系统完成项目的部署。

通过外卖系统项目的开发 + 项目部署整个流程,梳理自身所学的相关知识点。完成实践练习。

前端技术采用 Vue + ElementUI + Axios 搭建。

数据库采用 MySql5.7 并实现数据库的读写分离进行数据库的管理。

提示:以下是本篇文章正文内容

一、后端代码准备

1.实体类

实体类采用 Lombok 进行封装。

【Spring boot 项目实践】基于Spring boot 的外卖系统_第1张图片

其他实体类,菜品、套餐等等进行类似的封装。

数据库对应关系表:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第2张图片

由于页面展示需要,菜品需要展示对应绑定的菜品口味表,所以通过拓展实体类进行请求响应数据。
【Spring boot 项目实践】基于Spring boot 的外卖系统_第3张图片

2.数据层

数据层采用 MyBatis-plus 技术实现数据层对数据库的映射。

3.业务层

业务层采用 MyBatis-Plus 实现业务层接口(这里仅展示其中的基础代码,对应其他接口和实现类)

接口代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第4张图片

实现类代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第5张图片

4.表现层

(这里仅展示其中的基础代码,对应其他表现层)

【Spring boot 项目实践】基于Spring boot 的外卖系统_第6张图片

二、用户端

1.登录页面

登录验证采用邮箱验证,随机生成验证码。

用户登录状态验证:通过 HttpSession 跟踪,验证对象是否登录并保存用户的登陆状态。

用户登录验证码通过 redis 进行缓存,登陆后清除。

登录页面展示:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第7张图片

发送邮箱验证码代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第8张图片

登录验证代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第9张图片

2.前端页面

页面展示:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第10张图片

图片展示是管理端通过上传图片保存到对应存储地址,展示时通过访问对应地址显示。

菜品或套餐列表通过请求接口,响应回传数据进行展示。

请求参数有菜品分类ID以及销售状态,用菜品实体类进行接受。

前端菜品请求代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第11张图片

3.购物车

购物车页面展示:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第12张图片

购物车列表通过用户ID获取请求Api接口代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第13张图片

购物车的新增,通过购物车的新增请求实现对数据库数据的修改。

请求体中获取购物车实体参数,通过判断数据库内是否存在对应菜品或套餐。来实现商品数量的新增。

购物车新增代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第14张图片

购物车商品数量的减少或清空与新增类似。

4.个人主页

个人主页页面展示:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第15张图片

用户订单和历史订单均为请求订单Api接口。

Api接口代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第16张图片

地址管理的请求Api接口类似。

5.订单支付

订单支付代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第17张图片

由于用户下单,需要同时向数据库的订单表和订单详细表进行操作,故而需要在业务层重写新增操作且需要开启事务管理。

Api接口代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第18张图片

三、客户端

1.员工管理

员工管理通过新增员工、员工信息以及员工状态修改等对员工数据表进行修改。

分页查询以及条件查询代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第19张图片

2.分类管理

分类管理则是对所有菜品或套餐的所属分类进行增删改查,而由于分类管理具有绑定的下属管理,所以在删除分类以及修改分类操作时需要对菜品或者套餐进行根据分类 ID 查询。若分类并未被绑定才能进行操作。
删除操作需要进行绑定查询可以在业务层重写对应的删除代码。

代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第20张图片

然后再通过表现层调用接口完成删除操作。

分类修改操作类似。

3.菜品管理

菜品管理页面展示:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第21张图片

其他页面展示均类似。

由于菜品的新增修改和删除会同时对菜品表和口味表进行操作,故重写对应代码并用事务管理。

新增代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第22张图片【Spring boot 项目实践】基于Spring boot 的外卖系统_第23张图片

修改和删除操作类似。

4.套餐管理

套餐管理与菜品管理类似。

5.订单管理

订单管理同上。

四、数据库读写分离操作

读写分离的意义

因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。
但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。

本文采用的是 sharding 技术来实现的数据库读写分离。

1.主从数据库的配制

这里引用了一下其他大神博主的文章。

转载:如何实现数据库的读写分离

2.Idea中的配制

到 MavenRepository 找到并导入 sharding 的依赖包

配制代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第24张图片

(在配置里可能会出现无法识别的属性,选择无视就好。)

在这里启动项目可能会报出 Bean 的冲突错误。
具体原因是由于 Druid 和 ShardingJdbc 都会创建一个数据源连接的 Bean 而导致的 Bean 冲突。

解决办法:

  #允许bean定义覆盖(DataSourceBean冲突)
  main:
    allow-bean-definition-overriding: true

五、优化处理

1.前后端通话一致

前后端对话格式一致。

回传参数代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第25张图片

2.全局异常处理

全局异常,全部统一进行拦截处理。

代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第26张图片

其他异常处理可以通过添加对应异常类型进行处理。

代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第27张图片

3.缓存优化

由于用户频繁访问数据库的同一资源,当访问量较大时会造成数据库的效率降低。故而可以通过缓存优化,将访问量较大的某一数据表单进行缓存,当用户访问时返回缓存的结果。
出于学习用途为了较为直观看到 redis 缓存的测试结果,将 redis 默认的序列化器更换为字符串类型便于通过观察。

序列化器配制代码:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第28张图片

对菜品数据进行 redis 缓存:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第29张图片

4.Git 项目版本控制管理

Git版本控制:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第30张图片

5.Swagger Api接口文档

用 swagger 生成 Api 接口文档文档。

测试效果:

【Spring boot 项目实践】基于Spring boot 的外卖系统_第31张图片

六、Linux 项目部署

这里用的是手动打包上传的方式。

Linux 测试效果:

将项目产生的日志目录输出到 TakeOut.log

【Spring boot 项目实践】基于Spring boot 的外卖系统_第32张图片
(这里需要注意 Linux 上的的 Jre 版本和自己的项目工程所用的版本会不会出现版本冲突)

七、总结

在整个项目流程中,完整梳理了一边自己所学以及项目所需要的技术框架。在书写代码的过程中同样也遇到了很对不明所以的 Bug 而在不断的查找资料中逐渐得到解决。虽然很折磨人也很掉头发,但是在不断的遇到 Bug 解决 Bug 中的自己所得到的锻炼同样巨大,而最重要的也是自己能够逐渐形成一个完善的意识,即在今后的学习道路上如何进步以及在工作中所遭遇的问题应该如何解决。
而在本文中所遇到的 Bug 就不再赘述了。

你可能感兴趣的:(spring,boot,mybatis,后端,学习)