呱呱外卖

前言

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

    在k8s中,我们使用pod对外提供服务,这个时候,需要以下两种情形需要关注: pod因为不明原因挂掉,导致服务不可用 pod在高负载的情况下,不能支持我们的服务 如果人工监控pods,人工调整副本,那 ...

  2. TAP 交换机

    首发第一篇,就想分享一下TAP交换机的网络设备,为啥要谈这个呢,因为是一个冷门产品,大厂一般都没有,有也不作为重点产品推介,所以关注的人少,希望能给有这方面需求的人,又苦于找不到介绍资料的人以帮助.在 ...

  3. ElasticSearch 实现分词全文检索 - 测试数据准备

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  4. getopts解析shell脚本命令行参数

    getopts命令格式 getopts optstring name [arg] optstring为所有可匹配选项组成的字符串,每个字母代表一个选项.如果字母后有冒号:,表明该选项需要选择参数.比如 ...

  5. SpringBoot笔记--配置文件分类+yaml相关知识+读取配置文件内容

    配置文件 要是需要使用自己的配置替换默认配置时,需要使用后缀名为application.properties或者application.yml(application.yaml)进行配置 当然,几个文 ...

  6. Echarts中slider滑块调整样式

    今天遇到了一个问题,记录一下. 效果图. 原型图 一个页面中,引入了echarts的柱状图来动态显示数据,由于柱状图太高,echarts没有自动生成的滚动条,所以就用slider滑块手写了一个,但是效 ...

  7. 【读书笔记】Young Tableau_Calculus of tableaux_bumping and sliding

    目录 bumping Schensted bumping algorithm 举例 sliding/digging a hole 一些定义 Schiitzenberger sliding algori ...

  8. MyBatis 重点知识归纳

    一.MyBatis 简介 [1]MyBatis 是支持定制化 SQL,存储过程以及高级映射的优秀持久化框架.[2]MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取查询结果集.[3 ...

  9. Kafka 事务

    更多内容,前往IT-BLOG 在了解 Kafka的事务之前,先说一下 Kafka中幂等和事务(Kafka 0.11.0.0版本引入的两个特性)以此来实现 Exactly once(精确一次)了解更多链 ...

  10. Mybatis模糊查询的两种方式

    第一种 使用 || 字符: ** ** 第二种 使用 CONCAT 函数: ** ** 温馨提醒: 当然你也可以使用 $符 ,但是这种方式会导致不安全,让非法分子有机可寻,轻则数据库瘫痪,重则数据泄露 ...