Java项目实战--瑞吉外卖DAY03

目录

P22新增员工_编写全局异常处理器

P23新增员工_完善全局异常处理器并测试

p24新增员工_小结

P27员工分页查询_代码开发1

P28员工分页查询_代码开发2


P22新增员工_编写全局异常处理器



在COMMON新增全局异常捕获的类,其实就是代理我们这些controlle。通过aop把我们这些save方法和其他的方法给拦截到,如果抛异常了,统一在这个类里的方法统一处理。所以这块需要加@controllerAdvice 就是一个通知。在括号里指定拦截那些controller

加断点测试

再点击放行

package com.itheima.reggie.common;
/*** @Author Fxdll* @Date 2024/1/16 20:24* @PackageName:com.itheima.reggie.common* @ClassName: GlobalExceptionHandler* @Description: TODO* @Version 1.0*/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 {/*** 进行异常处理方法,就会被拦截到,统一处理* @return*/@ExceptionHandler(SQLIntegrityConstraintViolationException.class)public  R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){log.error(ex.getMessage());return R.error("失败了");}
}

P23新增员工_完善全局异常处理器并测试

运行显示

修改代码

package com.itheima.reggie.common;
/*** @Author Fxdll* @Date 2024/1/16 20:24* @PackageName:com.itheima.reggie.common* @ClassName: GlobalExceptionHandler* @Description: TODO* @Version 1.0*/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 {/*** 进行异常处理方法,就会被拦截到,统一处理* @return*/@ExceptionHandler(SQLIntegrityConstraintViolationException.class)public  R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){log.error(ex.getMessage());//当前这个异常信息是否含有 Duplicate entry关键字 ,若含有则违反了唯一约束 。// ex.getMessage()就是Duplicate entry 'zss' for key 'employee.idx_username'if (ex.getMessage().contains("Duplicate entry")){String[] split = ex.getMessage().split(" ");String msg = split[2] + "已存在";return R.error(msg);}return R.error("未知错误");}
}

p24新增员工_小结

P25员工信息分页查询_需求分析

P26员工信息分页查询_梳理程序执行过程

刷新页面

P27员工分页查询_代码开发1

创建MybatisPlusConfig        

配置分页插件

package com.itheima.reggie.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Author Fxdll* @Date 2024/1/17 21:47* @PackageName:com.itheima.reggie.config* @ClassName: MybatisPlusConfig* @Description: TODO配置mybatis pulus插件* @Version 1.0*/
@Configuration
public class MybatisPlusConfig {@Bean  //加入bean注解让spring进行管理public  MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());//加入拦截器return mybatisPlusInterceptor;}
}

controller加入方法

/*** 员工信息的分页查询* @param page* @param pageSize* @param name* @return*/@GetMapping("/page")public R<Page> page(int page, int pageSize,String name){log.info("page={},pageSize={},name = {}",page,pageSize,name);return null;}
}

调试

P28员工分页查询_代码开发2

  /*** 员工信息的分页查询* @param page* @param pageSize* @param name* @return*/@GetMapping("/page")public R<Page> page(int page, int pageSize,String name){log.info("page={},pageSize={},name = {}",page,pageSize,name);//构造分页构造器Page pageInfo = new Page(page,pageSize);//构造条件构造器.用来动态封装查询条件的LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();//添加一个过滤条件  ,StringUtils.isNotEmpty(name)表示当name不为空时才添加条件queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);//添加排序条件queryWrapper.orderByDesc(Employee::getUpdateTime);//执行查询employeeService.page(pageInfo,queryWrapper);return R.success(pageInfo);}
}

P29员工分页查询_分页测试

点击搜索

会进行like查询语句

状态栏数字如何让展现为汉字:

这样会显示原始数据

package com.itheima.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;/***员工登录*/@PostMapping("/login")public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){/*** 1、将页面提交的密码password进行md5加密处理* 2、根据页面提交的用户名username查询数据库* 3、如果没有查询到则返回登录失败结果* 4、密码比对,如果不一致则返回登录失败结果* 5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果* 6、登录成功,将员工id存入Session并返回登录成功结果*///         * 1、将页面提交的密码password进行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);//     * 3、如果没有查询到则返回登录失败结果if (emp==null){return R.error("登陆失败");}//       * 4、密码比对,如果不一致则返回登录失败结果if(!emp.getPassword().equals(password)){return R.error("登陆失败");}// * 5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果if(emp.getStatus() == 0){return R.error("账号已禁用");}// * 6、登录成功,将员工id存入Session并返回登录成功结果request.getSession().setAttribute("employee",emp.getId());return R.success(emp);}/*** 员工退出* @param request* @return*/@PostMapping("logout")public R<String> logout(HttpServletRequest request){//清理Session中保存的当前登陆员工的idrequest.getSession().removeAttribute("employee");return R.success("退出成功");}/*** 新增员工* 要返回json 所以添加@requestbody* @param employee* @return*/@PostMappingpublic R<String> save(HttpServletRequest request,@RequestBody Employee employee){log.info("新增员工,员工信息:{}",employee);//设置初始密码,但是要进行MD5加密employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));//设置创建时间employee.setCreateTime(LocalDateTime.now());employee.setUpdateTime(LocalDateTime.now());
//        获得当前用户的ID 强转为LONG类型Long empId = (Long) request.getSession().getAttribute("employee");employee.setCreateUser(empId);employee.setUpdateUser(empId);
//        最后调用save方法进行存入employeeService.save(employee);return R.success("新增员工成功");}/*** 员工信息的分页查询* @param page* @param pageSize* @param name* @return*/@GetMapping("/page")public R<Page> page(int page, int pageSize,String name){log.info("page={},pageSize={},name = {}",page,pageSize,name);//构造分页构造器Page pageInfo = new Page(page,pageSize);//构造条件构造器.用来动态封装查询条件的LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();//添加一个过滤条件  ,StringUtils.isNotEmpty(name)表示当name不为空时才添加条件queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);//添加排序条件queryWrapper.orderByDesc(Employee::getUpdateTime);//执行查询employeeService.page(pageInfo,queryWrapper);return R.success(pageInfo);}
}

P31启用/禁用员工账号

P32启用禁用员工账号_分析页面按钮动态显示效果

P33启用禁用员工账号_分析页面ajax发送请求过程

DAY01:Java项目实战--瑞吉外卖DAY01-CSDN博客

DAY02:Java项目实战--瑞吉外卖DAY02-CSDN博客

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

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

相关文章

spring+drools

引入依赖 <dependency><groupId>com.github.hongwen1993</groupId><artifactId>fast-drools-spring-boot-starter</artifactId><version>8.0.8</version><scope>compile</scope> </dependency>yml配置 spring: …

基于SSM+Shiro+Druid实现的企业资产后台管理系统

系统介绍 系统演示 关注【全栈小白】视频号查看演示视频 随着企业的发展&#xff0c;很多中小企业的规模越来越大&#xff0c;需要管理资产也越来越多&#xff0c;比如显示器&#xff0c;主机&#xff0c;打印机&#xff0c;传真机&#xff0c;复印机&#xff0c;电话&#…

C++提高编程——STL:list容器、set容器和map容器

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

洛谷p1036选数

[NOIP2002 普及组] 选数 题目描述 已知 n n n 个整数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1​,x2​,⋯,xn​&#xff0c;以及 1 1 1 个整数 k k k&#xff08; k < n k<n k<n&#xff09;。从 n n n 个整数中任选 k k k 个整数相加&#xff0c;可分别得…

SAP-PP: BOM选择标识不存在

在MM03 中选择生产版本无法打开 原因是未维护 BOM选择标识 配置路径&#xff1a;生产→物料需求计划→工厂参数→执行工厂参数总体维护→BOM/工艺路线选择 T-CD: OPPQ

flutter极光推送配置厂商通道(华为)笔记--进行中

一、基础集成按照下面官方文档进行 厂商通道相关参数申请教程 集成厂商 集成指南 官方文档&#xff1a;厂商通道回执配置指南 注意&#xff1a;不同厂商对app上架的要求不同&#xff0c;华为、荣耀 对app上架没有硬性要求 遇到问题 1、引入apply plugin: com.huawei.agconn…

Jenkins部署及应用

一. 简介 二. 下载地址源&#xff1a; …

Docker部署Stable-Diffusion-webui

前排提示&#xff1a;如果不想折腾&#xff0c;可直接跳到最后获取封装好的容器&#xff0c;一键运行 :D 前言 乘上AI生成的快车&#xff0c;一同看看沿途的风景。 启一个miniconda容器 docker run -itd -v 宿主机内SD项目路径:/tmp --gpus all --ipc host -p 7860:7860 con…

机器学习---可能近似正确(PAC)、出错界限框架

1. 计算学习理论概述 从理论上刻画了若干类型的机器学习问题中的困难和若干类型的机器学习算法的能力 这个理论要回答的问题是&#xff1a; 在什么样的条件下成功的学习是可能的&#xff1f; 在什么条件下某个特定的学习算法可保证成功运行&#xff1f; 这里考虑两种框架&…

《SPSS统计学基础与实证研究应用精解》视频讲解:数据结构重组(数据重组方式的选择、由变量组到样本观测值组的重组、由样本观测值组到变量组的重组)

《SPSS统计学基础与实证研究应用精解》4.11 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解4.11节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会…

2024年阿里云幻兽帕鲁Palworld游戏服务器优惠价格表

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…

求x大于等于n的最小因子-codeforce round 921 div2 B

CF的round921div2的B题 题目简介与分析 有一堆废话我就不提了&#xff0c;直奔重点&#xff0c;然后是他问你x分成n个数相加的形式&#xff0c;然后要求这n个数的最大公因数最大&#xff0c;并问你最大时这个最大公因数是多少。 我的思路 我把x看成很多个质因数相乘得到&…

gdb调试std::list和std::vector等容器的方法

GDB中print方法并不能直接打印STL容器中保存的变量&#xff0c;其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit 就可以使用它提供的方法方便调试容器 指定启动文件&#xff1a;~/.gdbinit&#xff0c;下面的方法任选其一。…

2024年华为OD机试真题-围棋的气-Python-OD统一考试(C卷)

题目描述: 围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19x19=361个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知: …

Debian 12.x apt方式快速部署LNMP

一.前期准备 1.建议服务器以最小化方式安装Debian 12。 何为Debian 12最小化安装呢&#xff1f;就是在安装Debian 12选择软件时只勾选SSH server和standard system utilities即可。另外&#xff0c;在分区时建议分一个/data分区&#xff0c;为服务器的数据目录。 2.配置源 #cd …

ffmpeg4.0.4 api-threadmessage-test.c

使用FFmpeg库模拟消息传递的C程序。它创建了一个消息队列以及多个发送者和接收者线程&#xff0c;这些线程在队列中推送和弹出消息。 程序的主要功能包括&#xff1a; 定义了发送者和接收者数据的结构&#xff0c;以及消息的结构。 free_frame函数用于释放消息帧的内存。 sen…

《动手学深度学习(PyTorch版)》笔记4.9

Chapter4 Multilayer Perceptron 4.9 Environment and Distribution Shift 4.9.1 Types of Distribution Shift 在一个经典的情景中&#xff0c;假设训练数据是从某个分布 p S ( x , y ) p_S(\mathbf{x},y) pS​(x,y)中采样的&#xff0c;但是测试数据将包含从不同分布 p T …

leetcode 字符串相关题目

344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;https://leetcode.cn/problems/reverse-s…

Linux cat,tac,more,head,tail命令 查看文本

目录 一. cat 和 tac命令二. head 和 tail 命令三. more命令 一. cat 和 tac命令 cat&#xff1a;用来打开文本文件&#xff0c;从上到下的顺序显示文件内容。tac&#xff1a;用法和cat相同&#xff0c;只不过是从下到上逆序的方式显示文件内容。当文件的内容有很多的时候&…

《Python 简易速速上手小册》第6章:Python 文件和数据持久化(基于最新版 Python3.12 编写)

注意&#xff1a;本《Python 简易速速上手小册》 核心目的在于让零基础新手「快速构建 Python 知识体系」 文章目录 <mark >注意&#xff1a;本《Python 简易速速上手小册》<mark >核心目的在于让零基础新手「快速构建 Python 知识体系」 6.1 文件读写操作6.1.1 打…