【外卖系统】新增员工

news2024/10/5 18:34:22

需求分析和数据模型

  • 新增员工就是将新增页面录入的员工数据插入到emoloyee表,username字段约束是唯一的,即员工的登录账号是唯一的
  • status字段默认值为1,表示状态正常

前端界面

在这里插入图片描述报错信息:
在这里插入图片描述

代码开发分析

  • 页面发送ajax请求,将新增员工页面输入的数据以json形式提交到服务端
  • 服务端Controller接收页面提交的数据并调用Service将数据进行保存
  • Service调用Mapper操作数据库,保存数据

账号:
zhangsan
员工姓名:
张三
手机号:
13112345678
性别:
身份证号:
123456789123456789

新鲜的报错

在这里插入图片描述

代码

package com.springboot.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.springboot.reggie.common.R;
import com.springboot.reggie.entity.Employee;
import com.springboot.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.xml.crypto.dsig.DigestMethod;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.time.LocalDateTime;

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;
    /**
     * 员工登录
     * @param request
     * @param employee
     * @return
     */

    @PostMapping("/login")//接受前端发来的Post请求
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee)
    {
        //1.将页面提交的代码password进行md5加密处理
        String password = employee.getPassword();
        //调用DigestUtils类中的生成MD5加密密码的类
       password =  DigestUtils.md5DigestAsHex(password.getBytes());//将哈希后的密码以十六进制字符串的形式打印出来
        //2.将页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        //等值查询
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeService.getOne(queryWrapper);//此处employee表中 员工id是唯一的 使用getOne()方法查出来唯一的数据
        //3.查看查询到数据的情况 如果没有查询到就返回登录失败的结果
        if(emp == null)
        {
            //登录失败 返回失败的结果 R类保存返回结果 有成功和失败两种
            return R.error("没有查询到数据,登录失败");
        }
        //4.密码比对,如果不一致返回登录失败结果
        if(!emp.getPassword().equals(password))
        {
            return R.error("密码不一致,登录失败");
        }
        //5.查看员工状态
        if(emp.getStatus() == 0)//0表示禁用
        {
            return R.error("账号已禁用");
        }
        //6.登录成功 将员工id存入Session并返回登录结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
        //return null;


    }
    /**
     * 员工退出
     * @param request
     * @return
     */

    @PostMapping("logout")
    public R<String> logout(HttpServletRequest request)
    {
        //清理当前登录员工的id
        request.getSession().removeAttribute(("employee"));
        return R.success("退出成功");
    }

    /**
     * 新增员工
     * @param employee
     * @return
     */

    @PostMapping
    public R<String> save(HttpServletRequest request,@RequestBody Employee employee)
    {
        log.info("新增员工,员工信息:{}",employee.toString());
        //设置初始密码123456 需要进行md5加密处理
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
        //将实体类中的一些字段 初始化
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());
        //获得当前登录用户的id
        Long empId = (Long)request.getSession().getAttribute("employee");
        employee.setCreateUser(empId);
        employee.setUpdateUser(empId);

        employeeService.save(employee);

        return R.success("新增员工成功");

    }
}

在这里插入图片描述
睡了个午觉,啥也没干,它自己正常了
在这里插入图片描述

全局异常

如果添加一条和已存在的员工信息完全相同的信息,就会报错,因为违反了唯一约束

报错信息:

==> Parameters: 1684090752251990017(Long), zhangsan(String), 张三(String), e10adc3949ba59abbe56e057f20f883e(String), 13112345678(String), 1(String), 123456789123456789(String), 2023-07-26T14:38:18.895(LocalDateTime), 2023-07-26T14:38:18.896(LocalDateTime), 1(Long), 1(Long)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d91e16e]
2023-07-26 14:38:19.042 ERROR 22012 --- [nio-8060-exec-9] c.s.r.common.GlobalExceptionHandler      : Duplicate entry 'zhangsan' for key 'employee.idx_username'

代码

package com.springboot.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody //把结果封装成json数据返回
@Slf4j
public class GlobalExceptionHandler {
    //异常处理方法
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex)
    {
        log.error(ex.getMessage());
        //如果插入的数据有重复 违反了唯一约束 报错的信息是有空格将字段隔开的

        if(ex.getMessage().contains("Duplicate entry"))
        {
            //把用户名:zhangsan动态地截出来
            //Duplicate entry 'zhangsan'
            String[] split = ex.getMessage().split(" ");//根据空格进行分隔
            String msg = split[2]+"已存在";//用户名在字符串数组的第二位
            R.error(msg);
            //这里忘记加返回值了
        }
        return R.error("未知错误...");
    }
}

又发癫,未知错误
在这里插入图片描述
很好,又是上午的错误,很玄学(睡一觉就好了的那种),不去管它了
在这里插入图片描述
idea给出的报错信息是:创建的用户名不能为空。
实际代码是没有问题,解决方法:退出系统重新登录,再添加。
看视频看到后面发现是,没在if分支里面写返回值

package com.springboot.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody //把结果封装成json数据返回
@Slf4j
public class GlobalExceptionHandler {
    //异常处理方法
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex)
    {
        log.error(ex.getMessage());
        //如果插入的数据有重复 违反了唯一约束 报错的信息是有空格将字段隔开的

        if(ex.getMessage().contains("Duplicate entry"))
        {
            //把用户名:zhangsan动态地截出来
            //Duplicate entry 'zhangsan'
            String[] split = ex.getMessage().split(" ");//根据空格进行分隔
            String msg = split[2]+"已存在";//用户名在字符串数组的第二位
            return R.error(msg);
        }
        return R.error("未知错误...");
    }
}

在这里插入图片描述

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

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

相关文章

推荐几款不错的AI绘画工具

随着近年来数据、算法等核心技术的不断进步&#xff0c;人工智能在内容创作各垂直领域的比例不断增加&#xff0c;包括人工智能写作、人工智能编辑和最近流行的人工智能绘画。 许多朋友也想跟上潮流&#xff0c;使用人工智能绘画生成软件创建人工智能图像&#xff0c;但我不知…

命令行计算和校验文件的MD5值,校验文件的完整性

MD5算法常常被用来验证网络文件传输的完整性&#xff0c;防止文件被人篡改。MD5全称是报文摘要算法&#xff08;Message-Digest Algorithm 5&#xff09;&#xff0c;此算法对任意长度的信息逐位进行计算&#xff0c;产生一个二进制长度为128位&#xff08;十六进制长度就是32位…

业务不打烊:解决软件系统升级痛点的新方法

数字化时代&#xff0c;随着用户对产品性能和功能要求的不断提升&#xff0c;应用服务升级成了企业保持竞争力的关键之一。然而&#xff0c;传统的应用服务升级往往会给用户带来不必要的中断和不便&#xff0c;这种“伤筋动骨”的升级方式已经无法满足日益增长的用户需求&#…

【Mo 人工智能技术博客】推荐系统(二)用户行为数据

任少斌 上一期&#xff1a;推荐系统&#xff08;一&#xff09;简要介绍 用户提供信息 正所谓“知己知彼&#xff0c;百战不殆”&#xff0c;为了让推荐系统更符合用户的偏好&#xff0c;我们需要深入了解用户的行为特征。如果有用户在注册的时候能够描述个人的偏好&#xff…

【网络安全带你练爬虫-100练】第15练:模拟用户登录

目录 一、目标1&#xff1a;理清逻辑 二、目标2&#xff1a;将每一步用代码进行表示 三、网络安全O 一、目标1&#xff1a;理清逻辑 模拟登录的基本流程 1、进入入口程序 2、读取目标URL 3、请求加上线程 4、确定请求数据包 5、请求格式的确认 6、数据的处理与判断 二、目标…

Integer包装类详解加部分源码

【1】Java.lang直接使用&#xff0c;无需导包&#xff1a; 【2】类的继承关系&#xff1a; 【3】实现接口&#xff1a; Serializable&#xff0c;Comparable<Integer> 【4】这个类被final修饰&#xff0c;那么这个类不能有子类&#xff0c;不能被继承&#xff1a; 【5】…

用Python做数据化运行,看完这篇你就懂了!

导读&#xff1a; 数据化运营是提高利润、降低成本、优化运营效率、最大化企业财务回报的必要课题。Python作为数据科学界的关键工具之一&#xff0c;几乎可以应用于所有数据化运营分析和实践的场景。 01 用Python做数据化运营 Python是什么&#xff1f;数据化运营又是什么&am…

怎么用手机做文字二维码?文本内容在线生成二维码技巧

手机端怎么将文字制作二维码呢&#xff1f;现在二维码是日常生活中经常会使用的一种工具&#xff0c;能够将不同的内容生成二维码使用&#xff0c;比如文本二维码就是常用的一种类型。那么当我们在没有电脑的情况下时&#xff0c;如何通过手机来快速生成二维码&#xff08;二维…

软件测试之性能测试概述

1.什么是性能测试 常见软件 的性能问题 1&#xff09;响应时间过长&#xff1a;软件在执行操作或加载数据时反应迟缓&#xff0c;会给用户造成困扰。响应时间过长可能是由于代码效率低下、网络延迟、资源瓶颈等原因引起的。 2&#xff09;内存占用过高&#xff1a;过高的内存占…

6_回归算法 —欠拟合、过拟合原因及解决方法

文章目录 一、过拟合与欠拟合1 过拟合1.1 线性回归的过拟合1.2 过拟合和正则项1.2.1 带有L2正则化的线性回归—Ridge回归1.2.2 带有L1正则化的线性回归—LASSO回归1.2.3 Ridge&#xff08;L2-norm&#xff09;和LASSO&#xff08;L1-norm&#xff09;比较1.2.4 Elasitc Net 2 欠…

YOLOv7 论文学习

1. 解决了什么问题&#xff1f; 实时的目标检测器是计算机视觉系统的重要组成部分。目前应用在 CPU 端的实时目标检测方法大多基于 MobileNet、ShuffleNet、GhostNet&#xff0c;而用在 GPU 的实时目标检测方法大多基于 ResNet、DarkNet、DLA&#xff0c;然后使用 CSPNet 策略…

bfs算法和dfs算法

bfs&#xff1a;广度优先搜索&#xff0c;一层一层搜索 dfs&#xff1a;深度优先搜索&#xff0c;先搜索一边&#xff0c;如果其中某个节点不符&#xff0c;那么回溯上一个节点&#xff0c;再向另一边搜索&#xff0c;直到搜索完毕为止 这是我个人的理解&#xff0c;具体可参…

AIGC第一波裁员,揭开了AI大模型创业的裂痕

大模型开始商业化肉搏&#xff0c;AIGC创业走向残酷时刻。 短短一年&#xff0c;AIGC产业正以N倍速经历其他产业可能要走几年或十几年的波澜起伏&#xff1a;从现象级产品爆红出圈、产业热情全面点燃、创业融资层出不穷&#xff0c;到一批明星独角兽被曝身陷窘境、裁员求生&am…

28.基于注解的声明式事务

基于注解的声明式事务 准备工作 将之间的使用的数据库表t_user更改为t_user1&#xff0c;使用的依赖和对应的jdbc.properties不变即可 准备数据库 BookSql.sql CREATE TABLE t_book (book_id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,book_name varchar(20) DEFAULT …

【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三)

系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中英翻译模型】LSTM机器翻译模型部署&#xff08;三&#xff09; 【如何训…

Java的0xFFFF在赋值、比较时引起的困惑

Java中的0xFFFF是整型&#xff0c;在赋值、比较的时候容易引起混淆&#xff0c;涉及到符号位、数值大小&#xff0c;赋值给什么类型的变量。我今天在编码的时候就遇到了一些困惑。用代码样例的形式记录下来&#xff0c;加深理解&#xff1a; package com.thb;public class Tes…

mysql null 值查询不出来问题

最新遇到mysql null 值查询的问题&#xff0c;当查询这个字段有的为null 有的不为null 该字段查询条件查询为null值得将不显示。 举例 新建表 test_user name和phone得值默认值为null 我们添加一些数据 查询下name 不是张三得数据 select * from test_user where name !张…

将Spring Session存储到Redis中实现持久化

文章目录 Session持久化1. 添加依赖2. 配置redis连接信息3. 存储和读取session从Redis Session持久化 1. 添加依赖 在项目中添加session依赖和redis依赖&#xff0c;如下所示&#xff1a; <dependency><groupId>org.springframework.boot</groupId><art…

答粉丝问)【问题记录解决】如何重新训练已经经过p-tuning微调的模型;自然语言处理平台dialogflow 智能对话式问答应用程序 相关问题

如果有人以你不喜欢的方式对待你,那一定是你允许的,否则他只能得逞一次。——张德芬 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 �…

字符串 (2)--- 前缀函数与 KMP 算法

/* https://www.luogu.com.cn/problem/UVA455 最小周期&#xff1a; n - pi[n -1] */ #include <iostream> #include <string> #include <vector> using namespace std; vector<int> prefix_fun(string s) { int len s.length(); /…