Spring Boot入门项目之外卖
文章目录
呱呱外卖
前言
我们常常会听说,学编程要做项目,这样才能加深自己的印象,并且可以巩固自己的所学到的知识,前面不是谈到在学习SSM框架嘛,然后也去找了一个项目来做,这次跟的项目是黑马的外卖项目,呱呱外卖是我取的,如果大家有兴趣可以去B站上搜索这个视频,我觉得跟着项目视频来做对小白也是非常友好的,下面是我的仓库地址,我就放在文章的开头这里了,如果大家想去看看这个项目,也可以直接在我的仓库下通过说明文档运行整个项目,再决定这个项目是否一做
https://github.com/lyzhang30/reggie
项目介绍
项目的介绍会包括几个部分,首先这个项目是一个外卖项目,然后项目的背景我就不再陈述了,但是后面我会介绍这个项目采用的后端技术栈,和一些需要的基本配置。
项目技术栈介绍(主讲后端)
前端代码是黑马提供的,我只是对它做了一点修改,然后主要是编写后端接口,前端主要是用到 三大件+Vue,后端框架主要是用了SpringBoot、Spring-Cache 和 Mybatis-plus
数据库需要用到MySQL来保存下单和菜品等数据,验证码是可以采用阿里云的短信验证,但是我没有做,需要的话,大家可以去阿里云官方网站上,查看自己的SerectKey,并添加依赖,除此之外还得用到Redis来缓存数据。
操作Redis我采用了两种方式,一种是Spring Cache的注解式编程,另外一种式直接采用spring-boot-starter-data-redis来保存和删除缓存数据,接口文档主要是采用了Swagger来进行管理。

项目功能介绍
项目的功能包括移动端和后台端,后台端主要是对菜品数据、套餐数据、订单数据进行管理和删除,移动端主要是进行查看和一些修改,下单和加入购物车,具体的功能如下面的这张思维导图。

项目的代码结构
下面我们来介绍整个项目的代码结构,代码大家可以先从仓库中拉取下来,一些配置文件我就不进行说明了,这里主要是说一下各部分的类的的功能以及涉及到实体类。
接口文档可以在运行后看到,包含所有的接口和涉及到实体类
在运行整个项目后,打开就可以查看整个项目的所有的接口文档
http://localhost:8888/doc.html

实体类
实体类主要位于entity包下面,包含AddressBook,Category,Dish, DishFlavor, Employee, OrderDetail, Orders, Setmeal, SetmealDish, ShoppingCart, User
还会涉及到Dto数据对象例如DishDto, OrderDto, SetmealDto
控制类(Controller)
这里涉及到下图的这些控制类,每一控制类都会负责对应的功能,接收对应的请求,

Service类和Mapper类
这个类下面的代码只要是为了实现一些业务的实现逻辑,Service主要是继承了IService,实现类需要继承ServiceImpl,这样整个业务类就携带了很多的方法可供调用,Mapper层可以采用的QueryWrapper的形式和写.xml的格式来对数据库进行CRUD,Mapper我们会继承BaseMapper,这样的话,有很多的方法可以供我们去调用,可以减少我们自己去一些简单查询的工作量
缓存
缓存部分我主要是加在了菜品数据和套餐数据的查询中,主要的添加方式有RedisTemplate和Spring Cache方式,
注入RedisTemplate的方式,需要导入相应的依赖包
@Autowired
private RedisTemplate redisTemplate;
第二种就类似这样的吗,这些注解是Spring Cache中,
@PostMapping
@CacheEvict(value="setmealCache", allEntries=true)
@ApiOperation("新增套餐")
public R<String> addSetmeal(@ApiParam("将套餐数据封装成一个SetmealDto") @RequestBody SetmealDto setmealDto) {
log.info("套餐:{}",setmealDto);
setmealService.saveWithDish(setmealDto);
return R.success("添加成功");
}
接口文档管理
采用的是knife4j来进行管理吗,这个是支持Swagger注解的,并且也是可以在线查看文档和进行接口的调试的
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
项目添加的部分
原项目是没有对菜品和套餐的禁用和删除部分的、登录退出、订单详情页面的查询以及订单的派送,这些功能都是我自己后面添加上去的,如果大家觉得我开发的有问题也欢迎大家在评论区中提出来一起交流。
项目的总结
通过本次项目的实践,可能只是一次简单的增删改查,但是作为一个刚刚入门的人来说的话,写这个项目也是需要花一定的时间和精力的,如果你是在找一个项目作为你刚刚开始入门的学习的话,我觉得这个项目还是可以的,当你不懂时,你可以去找视频来进行查看学习。
项目的亮点
该项目在优化环节采用了Redis做缓存,并使用上了Spring Cache来进行缓存的管理
该项目是使用了读写分离。
在保存用户id时,使用了ThreadLocal来保存用户登录的id
读写分离这里我并没有介绍,但是这个项目确实是用到了,ThreadLocal也是在每一个用户进行连接时,都会被当成一个线程,而每一个线程都会有自己独立的存储空间和副本,这样把登录id保存在这里,后面的业务当需要使用到时,可以直接获取到,也算是一个挺好的点。总之,作为一个入门级项目还是非常顶的…
总结
好了,今天的分享也就到这里了,这个项目也是花了半个多月一点点敲过来的,因为白天还有事情要干,如果大家有什么问题或者发现代码有什么问题的话,欢迎大家在评论区提出来。
Spring Boot入门项目之外卖的更多相关文章
- 使用IDEA搭建Spring Boot入门项目
简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...
- 《Spring Boot 入门及前后端分离项目实践》系列介绍
课程计划 课程地址点这里 本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发 ...
- 161103、Spring Boot 入门
Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...
- Spring Boot入门教程1、使用Spring Boot构建第一个Web应用程序
一.前言 什么是Spring Boot?Spring Boot就是一个让你使用Spring构建应用时减少配置的一个框架.约定优于配置,一定程度上提高了开发效率.https://zhuanlan.zhi ...
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版
一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值
在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ...
- Spring Boot 入门(五):集成 AOP 进行日志管理
本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...
- Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理
本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...
- Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...
随机推荐
- 解决vue项目中文出现乱码
出现中文乱码的文件以ediplus打开,右上方有点击file选择sall As....另存为 下方有encoding 选择utf-8 ,覆盖以前的文件,就好了.
- 快速乘_c/c++
快速乘的使用主要是这种情形:要计算(a * b) % p时,发现a * b爆 long long 了,而a, b, p没有爆 long long 快速乘的原理: 比如当我们需要要计算3 * 2 ...
- Python Type Hint中Optional[str]=None和str=None的区别
Python Type Hint中Optional[str]=None和str=None的区别 1 问题来源 在读到Fluent Python, 2ed Edition, P260时产生了一些疑问: ...
- 推荐一套轻量级的开源图床系统:Light Fast Picture
如果您跟我一样平时有些博客的习惯,那么图片存储是否有困扰过你呢?今天就给大家推荐一款不错的开源图床系统:Light Fast Picture 它是一个基于koa + vue3.x + typescri ...
- JavaWeb相关学习环境的配置(一)
JavaWeb相关学习环境的配置(一) 之 JDK的配置 步骤: 1.去官网找到自己想要下载的版本: 官网地址:https://www.oracle.com/java/technologies/dow ...
- MySQL学习(四)锁机制
分类 读锁(共享锁):对同一个数据,多个读操作可以同时进行,互不干扰 写锁(互斥锁):如果当前写操作没有完毕,则无法进行其他的读操作.写操作 操作范围 表锁:一次性对一张表整体加锁.如myisam存储 ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——14.屏幕显示原理与文本模式
学习操作系统原理最好的方法是自己写一个简单的操作系统. 一.屏幕显示原理 电脑显示器屏幕是由很多很小的像素组成的.每个像素就像是一个小灯泡,在屏幕上一排一排的整齐排列着.只要能控制每个像素的颜色就能显 ...
- 2.错误代码C2440
错误 C2440 "初始化": 无法从"const char [5]"转换为"char *" 从整型强制转换为指针类型要求 reinterp ...
- P7961 数列 题解
对模拟的过程不敏感,对范围的数字不敏感 手玩是发现规律的好方式 计数 dp 以及一众计数题是明显短板,需要加紧突破. 样例解释已经较为明显地提示了这道题的大致做法.对于计数题,有动归与组合数学两种方法 ...
- $\mathcal{2023WinterHoliday}$刷题总结
\(\mathcal{2023WinterHoliday}\) \(\mathcal{CTF}\) \(\mathcal{web}\) 1.\(json格式:\)$json['x']=="w ...