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学习之基础大全
1 导入vue: 2 <script src="vue.min.js"></script> 3 创建vm实例 4 var vm=new Vue({ 5 el ...
- 我亲自整理的Tampermonkey(以下简称tm)v4.13.6136的编辑器按键映射(基于联想笔记本键盘+win10+火狐浏览器企业版)
警告:你可以对该随笔内容进行转载,但必须写明其来源网址,以及其作者是博客园的zqdlly,否则后果自负!不要小看了我,我一定会让你付出你应得的成本. 0. 家喻户晓的 键 原生comment myMe ...
- Unity检测鼠标是否与UI交互
在Unity项目中,假设在鼠标按键时会触发游戏内的操作,但是在鼠标与UI进行交互时我们希望停止游戏中的操作,这是需要使用EventSystem中的方法来检测鼠标是否正在与UI交互 private bo ...
- asyncio基础用法
说明:需要Python 3.7+ 1.并发运行两个coroutine,写法一: 用Task import asyncio import time async def say_after(delay, ...
- VC9.0 for Python2
python2安转包时提示: pip install xxx时,提示 Microsoft Visual C++ 9.0 is required 下载并安装: 链接:https://pan.baidu. ...
- 有时候用uniapp写项目时发现,Map组件在安卓真机可以缩放和移动,但是在ios真机就不行
如果你的地图组件是放到popup组件里,是用弹框打开的,如何ios端不能缩放, 那你一定要看下这个弹框的层级是否比地图层级要高 z-index. 如果高于地图层级,那地图肯定是不能移动和缩放的
- 7. 基础增删改 - 创建管理员用Model-Drive App管理后台信息 - 创建Model-Driven App(什么是model-driven app)
一..什么是Model-Driven App? Model-Driven App是一个以组件为中心的应用程序开发方法,它不需要通过代码来运行,而且可以根据自己的需求来设计布局,编写出各种简单或者复 ...
- OSPF之路由过载overflower 及GR(Graceful Restart优雅重起)
- 关于 manacher 的一个小细节
在该算法中,我们需要用到一个数组 hw[i] ,代表 i 的最大回文半径.而且这个半径不包括 i 本身(若串为 ccc 则 hw 为 1). 这时最终答案为最大的 hw 减一. 为什么要减一呢?最终的 ...
- Mathematica制作和使用程序包
步骤 这里拿你制作并且使用一个程序包lost为例子 新建一个空白.wl文档,输入代码如下 BeginPackage[ "MyPkg`"] MainFunction::usage = ...