高级室内设计网站,做网站如何选择数据源,2024免费网站推广大全,天津票网网站目录 P22新增员工_编写全局异常处理器
P23新增员工_完善全局异常处理器并测试
p24新增员工_小结
P27员工分页查询_代码开发1
P28员工分页查询_代码开发2 P22新增员工_编写全局异常处理器 在COMMON新增全局异常捕获的类#xff0c;其实就是代理我们这些controlle。通过aop把…目录 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 RString 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 RString exceptionHandler(SQLIntegrityConstraintViolationException ex){log.error(ex.getMessage());//当前这个异常信息是否含有 Duplicate entry关键字 ,若含有则违反了唯一约束 。// ex.getMessage()就是Duplicate entry zss for key employee.idx_usernameif (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 RPage 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 RPage page(int page, int pageSize,String name){log.info(page{},pageSize{},name {},page,pageSize,name);//构造分页构造器Page pageInfo new Page(page,pageSize);//构造条件构造器.用来动态封装查询条件的LambdaQueryWrapperEmployee 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 REmployee 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查询数据库LambdaQueryWrapperEmployee queryWrapper new LambdaQueryWrapper();queryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp employeeService.getOne(queryWrapper);// * 3、如果没有查询到则返回登录失败结果if (empnull){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 RString logout(HttpServletRequest request){//清理Session中保存的当前登陆员工的idrequest.getSession().removeAttribute(employee);return R.success(退出成功);}/*** 新增员工* 要返回json 所以添加requestbody* param employee* return*/PostMappingpublic RString 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 RPage page(int page, int pageSize,String name){log.info(page{},pageSize{},name {},page,pageSize,name);//构造分页构造器Page pageInfo new Page(page,pageSize);//构造条件构造器.用来动态封装查询条件的LambdaQueryWrapperEmployee 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发送请求过程 DAY01Java项目实战--瑞吉外卖DAY01-CSDN博客
DAY02Java项目实战--瑞吉外卖DAY02-CSDN博客