学习笔记-瑞吉外卖项目实战(一)

软件开发整体介绍

 软件开发流程

角色分工

软件环境

瑞吉外卖项目介绍

项目介绍

产品原型介绍

技术选型

功能架构

角色

开发环境搭建

数据

创建database reggie,在里面创建表:

maven

创建springboot项目并导入相关依赖坐标:

我们可以在项目启动类上添加注解@Slf4j, 该注解由lombok提供。添加后我们可以使用属性log在控制输出日志:

我们将前端页面的资源导入到static目录,之后随便访问一个html页面:

访问成功。

后台系统登录功能

需求分析

打开前端的登录界面,点击登录

再去查看前端代码,确定返回数据的类型大概:

代码开发

我们将大致的框架创建好:

Employee类与employee表中的字段对应。dao,service分别继承BaseMapper和IService,使用mybatisplus来帮助构建。

我们再定义数据的统一返回类型,使用类R来定义:

为了通用性,还给R设置了泛型<T>,返回的数据类型即可以根据需求来改变

    private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息,成功无此信息private T data; //数据private Map map = new HashMap(); //动态数据

里面有两个静态方法,分别是数据获取成功和失败对应的方法:

我们再在controller类中创建员工登录的方法:

编写代码:

    @PutMapping("/login")public R<Employee> login(HttpServletRequest httpServletRequest, @RequestBody Employee employee) {//1.对传进的密码进行md5加密String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());//2.根据页面提交的用户名username查询数据库;LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername, employee.getUsername());Employee emp =employeeService.getOne(queryWrapper);                          //username在数据库为unique//3.查询数据库中是否存在该用户名if(null==emp){return R.error("该用户未注册");}//4.密码比对else if(!emp.getPassword().equals(password)){return R.error("密码错误");}//5.查看员工状态,如果未已警用状态,则返回禁用结果else if(emp.getStatus()!=1){return R.error("该账号已被封禁");}//6.登录成功,将员工id存入Session并返回登陆成功结果else {httpServletRequest.getSession().setAttribute("employee",emp.getId());return R.success(emp);}}

功能测试

当输入不存在的用户名:

输入错误密码:

用户名密码与状态都正确的话,则登陆成功直接跳转到管理端。

后台系统退出功能

需求分析

登录成功后,应该还有对应的登出功能

前端展示的页面右上角有个关机的按钮,那就是前端发起登出响应的按钮。

查看前端代码后,发现是发送了一个employee/logout的post请求,我们则需要去实现这个操作。

 代码开发

退出只需返回到登录界面,并且将先前传入的session数据清除即可。页面跳转在前端代码实现了,我们只需实现数据清除即可。

调用httpServletRequest的getsession()的removeAttribute()方法。

    /*** 员工退出* @param httpServletRequest* @return*/@PostMapping("/logout")public R<String> logout(HttpServletRequest httpServletRequest){//清理session中保存的当前员工的Id。httpServletRequest.getSession().removeAttribute("employee");return R.success("退出成功");}

功能测试:

登录成功后,浏览器保存有数据

点击登出按钮

保存的数据被清除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】AttributeError: module ‘matplotlib‘ has no attribute ‘imshow‘

首先 在学习OpenCV的第一个程序&#xff0c;碰到这个问题记录一下。首先我已经安装好了matplotlib 如下图&#xff1a; 所以可以排除的就是我已经具备了这个库&#xff0c;那就是我在调用的时候出现的问题。 其次 回到pycharm&#xff0c;检查一下代码并做出如下的修改。 …

通达信抛物线SAR指标原理详解、参数设置及选股公式

抛物线指标(SAR)是由技术分析大师威尔斯威尔德(Welles Wilder)发明的&#xff0c;在其1978 年出版的《技术交易系统新概念》一书中介绍了该指标。SAR指标通过跟踪股票价格的动态变化&#xff0c;在走势图上以一系列点的形式显示&#xff0c;提供了一种判断趋势反转的方法&#…

鸿蒙应用开发-初见:入门知识、应用模型

基础知识 Stage模型应用程序包结构 开发并打包完成后的App的程序包结构如图 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件&#xff0c;即HAP一个应用中的.hap文件合在一起称为一个Bundle&#xff0c;bundleName是应用的唯一标识 需要特别说明的是&…

某医院小程序存在支付漏洞和越权

某医院小程序存在支付漏洞和越权查看他人身份证&#xff0c;手机号&#xff0c;住址等信息 一个医院线上的小程序 登陆后点击个人信息&#xff0c;抓包&#xff0c;放到repeter模块&#xff0c; 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据&#xff0c;这…

Redis缓存设计典型问题

目录 缓存穿透 缓存失效&#xff08;击穿&#xff09; 缓存雪崩 热点缓存key重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据…

MybatisPlus改造逻辑删除有多方便

MybatisPlus的逻辑删除可以有效保留历史数据。之前没有用逻辑删除的项目&#xff0c;想改造成逻辑删除总共需要几步&#xff1f; 答案&#xff1a;4步搞定 一、修改pom.xml的MybatisPlus版本&#xff08;注意版本兼容性&#xff09; <properties>...<!--<mybatis-…

anyRTC 融合音视频能力底座:助力企业数字化转型

随着全球化的发展&#xff0c;产业竞争日益激烈。数字化转型和创新成为了企业提高竞争力、实现可持续发展的重要手段&#xff0c;面对产业结构调整、资源环境挑战、数字技术与创新带来的行业颠覆与机遇&#xff0c;企业需要进行数字化转型和创新以适应新环境和新时代的挑战。 …

P13 C++ 类 | 结构体内部的静态static

目录 01 前言 02 类内部创建静态变量的例子 03 在类的内部创建静态变量的作用 04 最后的话 01 前言 本期我们讨论 static 在一个类或一个结构体中的具体情况。 在几乎所有面向对象的语言中&#xff0c;静态在一个类中意味着特定的东西。这意味着在类的所有实例中&#xff…

Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

错误再现&#xff1a; 启动Springboot项目时候报错 java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Maven/apache-maven-3.6.3/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/Sprin…

vue2+el-select实现分页加载更多功能

需求&#xff1a; 由于项目下拉框数据过多&#xff0c;一次性加载完&#xff0c;会有性能问题&#xff0c;于是希望可以增加分页加载更多功能。 实现效果&#xff1a; 如上图&#xff1a;点击“点击加载更多”按钮&#xff0c;实现分页加载下一页&#xff0c;直到最后一页&am…

香港优才计划是什么意思?一文详解2023年最新政策!

香港优才计划是什么意思&#xff1f;一文详解2023年最新政策&#xff01; 目前香港优才计划申请火热&#xff0c;但是还是有很多新手不太了解这个项目&#xff0c;跟风申请绝对不是什么好事&#xff0c;先了解清楚再考虑也是对自己对家人的一种交代。这篇文章就再来科普下。 优…

WEB渗透—反序列化(六)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好&#xff0c;下面就来实现相应的功能&#xff0c;目前先针对自定义…

实现了父类 纯虚函数为什么还有 无法解析外部符号错误

使用背景&#xff1a; 将C 的函数或接口使用 pybind11 封装成可以供python 使用调用的接口或函数&#xff0c;使用了CMake 编译&#xff08;若之前可以编译通过&#xff0c;现在编译不通过&#xff0c;重新选择 source code 路径&#xff09;成 VS 2019 可使用的目标解决方案&a…

ThinkPHP6学生选课管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6学生选课管理系统 一 介绍 此学生选课管理系统基于ThinkPHP6框架开发&#xff0c;数据库mysql8&#xff0c;前端bootstrap。系统角色分为学生&#xff0c;教师和管理员。学生登录后可进行选课&#xff0c;教师登录后可查看选课情况…

碧莲盛 x Tapdata:实时数据如何赋能医疗美容行业,助力医疗决策及个性化服务升级

使用 Tapdata&#xff0c;化繁为简&#xff0c;轻量代替 OGG、DSG 这样的同步工具&#xff0c;以及 Kettle、Informatica、Python 这样的 ETL 工具或脚本&#xff0c;帮助企业在五花八门的数据需求面前&#xff0c;实现“做且仅做最后一次 ETL”的目标&#xff0c;这绝非纸上谈…

Win7 SP1 x64 Google Chrome 字体模糊

1 打开 Google Chrome &#xff0c;地址栏输入 chrome://version/ &#xff0c;字体模糊。 2 Microsoft Update Catalog 搜索现在更新 kb2670838 &#xff0c;安装&#xff0c;重启电脑。 3 打开 Google Chrome&#xff0c;地址栏输入 chrome://version/ &#xff0c;字体正常。…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报​

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI生成技术威胁版权保护&#xff0c;水印技术和法律完善是关键 Sam Altman对…

记录一次如何查询mysql分库分表数据

一、前言 本次查询是在未知如何分库分表的情况下&#xff0c;对表数据进行查询&#xff0c;其中有的字段为JSON结构。需要提取JSON中某个字段的内容。 二、查询步骤 1、第一方式是将所有分表数据进行union all select * from apporder.ord_shopping_order union all sel…

vue跨域请求

vue.config.js devServer:{proxy:"http://localhost:8081"}main.js中定义 import axios from "axios"; axios&#xff0c; App.vue中引用 <template><Article/> </template><script> import Article from "/components/Ar…