• Spring Boot入门项目之外卖


    呱呱外卖

    前言

    我们常常会听说,学编程要做项目,这样才能加深自己的印象,并且可以巩固自己的所学到的知识,前面不是谈到在学习SSM框架嘛,然后也去找了一个项目来做,这次跟的项目是黑马的外卖项目,呱呱外卖是我取的,如果大家有兴趣可以去B站上搜索这个视频,我觉得跟着项目视频来做对小白也是非常友好的,下面是我的仓库地址,我就放在文章的开头这里了,如果大家想去看看这个项目,也可以直接在我的仓库下通过说明文档运行整个项目,再决定这个项目是否一做

    https://github.com/lyzhang30/reggie
    
    • 1

    项目介绍

    项目的介绍会包括几个部分,首先这个项目是一个外卖项目,然后项目的背景我就不再陈述了,但是后面我会介绍这个项目采用的后端技术栈,和一些需要的基本配置。

    项目技术栈介绍(主讲后端)

    前端代码是黑马提供的,我只是对它做了一点修改,然后主要是编写后端接口,前端主要是用到 三大件+Vue,后端框架主要是用了SpringBoot、Spring-Cache 和 Mybatis-plus

    数据库需要用到MySQL来保存下单和菜品等数据,验证码是可以采用阿里云的短信验证,但是我没有做,需要的话,大家可以去阿里云官方网站上,查看自己的SerectKey,并添加依赖,除此之外还得用到Redis来缓存数据。

    操作Redis我采用了两种方式,一种是Spring Cache的注解式编程,另外一种式直接采用spring-boot-starter-data-redis来保存和删除缓存数据,接口文档主要是采用了Swagger来进行管理。

    项目功能介绍

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

    项目的代码结构

    下面我们来介绍整个项目的代码结构,代码大家可以先从仓库中拉取下来,一些配置文件我就不进行说明了,这里主要是说一下各部分的类的的功能以及涉及到实体类。

    接口文档可以在运行后看到,包含所有的接口和涉及到实体类

    在运行整个项目后,打开就可以查看整个项目的所有的接口文档

    http://localhost:8888/doc.html
    
    • 1

    实体类

    实体类主要位于entity包下面,包含AddressBook,Category,Dish, DishFlavor, Employee, OrderDetail, Orders, Setmeal, SetmealDish, ShoppingCart, User
    
    • 1

    还会涉及到Dto数据对象例如DishDto, OrderDto, SetmealDto

    控制类(Controller)

    这里涉及到下图的这些控制类,每一控制类都会负责对应的功能,接收对应的请求,
    
    • 1

    Service类和Mapper类

    这个类下面的代码只要是为了实现一些业务的实现逻辑,Service主要是继承了IService,实现类需要继承ServiceImpl,这样整个业务类就携带了很多的方法可供调用,Mapper层可以采用的QueryWrapper的形式和写.xml的格式来对数据库进行CRUD,Mapper我们会继承BaseMapper,这样的话,有很多的方法可以供我们去调用,可以减少我们自己去一些简单查询的工作量
    
    • 1

    缓存

    缓存部分我主要是加在了菜品数据和套餐数据的查询中,主要的添加方式有RedisTemplate和Spring Cache方式,

    注入RedisTemplate的方式,需要导入相应的依赖包

    @Autowired
        private RedisTemplate redisTemplate;
    
    • 1
    • 2

    第二种就类似这样的吗,这些注解是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("添加成功");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接口文档管理

    采用的是knife4j来进行管理吗,这个是支持Swagger注解的,并且也是可以在线查看文档和进行接口的调试的

        <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>3.0.2</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    项目添加的部分

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

    项目的总结

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

    项目的亮点

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

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

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

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

    总结

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

  • 相关阅读:
    [Leetcode]6032. 得到要求路径的最小带权子图
    【Maven入门篇】(1)详细讲解Maven的安装&&报错解决
    vue 动态引入js
    基于java+springmvc+mybatis+vue+mysql的老年人健康饮食管理系统
    matlab 方向向量约束的PCA快速粗配准
    天月德统计
    洛谷P3758 可乐
    OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(5)转换 / Transforming翻译
    黑马JVM总结(十六)
    Day08--自定义组件的properties属性
  • 原文地址:https://blog.csdn.net/zly03/article/details/126211777