呱呱外卖

前言

我们常常会听说,学编程要做项目,这样才能加深自己的印象,并且可以巩固自己的所学到的知识,前面不是谈到在学习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>

项目添加的部分

原项目是没有对菜品和套餐的禁用和删除部分的、登录退出、订单详情页面的查询以及订单的派送,这些功能都是我自己后面添加上去的,如果大家觉得我开发的有问题也欢迎大家在评论区中提出来一起交流。

项目的总结

通过本次项目的实践,可能只是一次简单的增删改查,但是作为一个刚刚入门的人来说的话,写这个项目也是需要花一定的时间和精力的,如果你是在找一个项目作为你刚刚开始入门的学习的话,我觉得这个项目还是可以的,当你不懂时,你可以去找视频来进行查看学习。

项目的亮点

  1. 该项目在优化环节采用了Redis做缓存,并使用上了Spring Cache来进行缓存的管理

  2. 该项目是使用了读写分离。

  3. 在保存用户id时,使用了ThreadLocal来保存用户登录的id

读写分离这里我并没有介绍,但是这个项目确实是用到了,ThreadLocal也是在每一个用户进行连接时,都会被当成一个线程,而每一个线程都会有自己独立的存储空间和副本,这样把登录id保存在这里,后面的业务当需要使用到时,可以直接获取到,也算是一个挺好的点。总之,作为一个入门级项目还是非常顶的…

总结

好了,今天的分享也就到这里了,这个项目也是花了半个多月一点点敲过来的,因为白天还有事情要干,如果大家有什么问题或者发现代码有什么问题的话,欢迎大家在评论区提出来。

Spring Boot入门项目之外卖的更多相关文章

  1. 使用IDEA搭建Spring Boot入门项目

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  2. 《Spring Boot 入门及前后端分离项目实践》系列介绍

    课程计划 课程地址点这里 本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发 ...

  3. 161103、Spring Boot 入门

    Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...

  4. Spring Boot入门教程1、使用Spring Boot构建第一个Web应用程序

    一.前言 什么是Spring Boot?Spring Boot就是一个让你使用Spring构建应用时减少配置的一个框架.约定优于配置,一定程度上提高了开发效率.https://zhuanlan.zhi ...

  5. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  6. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

  7. Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值

    在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ...

  8. Spring Boot 入门(五):集成 AOP 进行日志管理

    本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...

  9. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  10. Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示

    关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...

随机推荐

  1. density plot

    FIN=read.table("/Users/zhongyuantian/macshare/workSpace2021/1.TFY/1.3.TFY20201215/1.3.1.TFY1C_T ...

  2. MQ(为什么要使用MQ)

    为什么使用MQ? 个人认为主要由几下几点: 1.在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达数据库,直接导致无数的行锁表锁,甚至最 ...

  3. python之pyqt5-第一个pyqt5程序-图像压缩工具-小记

    (如想转载,请联系博主或贴上本博地址) 此为学习pyqt5的第一个程序,图像压缩工具. 因为比较简单,下面直接贴上代码. 效果图如下: # -*- coding: utf-8 -*- import s ...

  4. uglifyjs-webpack-plugin配置

    项目使用vuecli3搭建,在vue.config.js文件中进行配置,主要配置了去除线上环境的打印信息. 首先安装插件, 执行命令 npm install uglifyjs-webpack-plug ...

  5. msfvenom的使用

    msfvenom也只metasploit中的一个很强的工具,msfvenom生成木马非常的迅速可以各种版本的木马 该工具由msfpaylod和msfencodes的组成 生成木马是需要在本地监听,等待 ...

  6. 如何利用javaweb实现数据的可视化

    描述 之前一直使用html进行网页版的数据库查询啥的,没有图片的参与,也没有将一条条数据变成较为直观的图画形式,这就是来实现以下数据的图画形式 了解及基础说明 通过查阅资料,我首先了解到要是想实现数据 ...

  7. Java并发小结01

    Java并发小结01 主要参考自<实战Java高并发程序设计>. 需要知道的概念 - 同步与异步 - 并发与并行 - 临界区 - 阻塞与非阻塞 - 死锁.饥饿.活锁 同步与异步 同步:同步 ...

  8. operator简介

    原理 operator 是一种 kubernetes 的扩展形式,利用自定义资源对象(Custom Resource)来管理应用和组件,允许用户以 Kubernetes 的声明式 API 风格来管理应 ...

  9. Masa Framework源码解读-02缓存模块(分布式缓存进阶之多级缓存)

    序言 ​ 今天这篇文章来看看Masa Framework的缓存设计,上一篇文章中说到的MasaFactory的应用也会在这章节出现.文章中如有错误之处还请指点,咱们话不多说,直入主题. Masa Fr ...

  10. 最简单的for循环语句

    前言 在前面的文章中,壹哥给大家讲解了顺序结构.分支结构,接下来我们就来学习Java里的循环结构.Java里的循环结构,可以通过while.do-while.for.foreach等方式进行实现,今天 ...