springboot外卖平台项目day3

一.查看所有员工

当需要获得一组数据时,返回的泛型使用mp提供的page,里面的records属性会保存这组数据

protected List<T> records;

可以用mp的list来查看所有员工,但这样获得的数据没有分页效果
所以使用mp的分页插件来进行查询
1.定义一个Page用于提供查询时所在页面和每页的容量
2.wrapper来定义查询条件
3.使用page方法来进行查询,结果封装在Page类的对象中

@GetMapping("/page")
/**
 *     protected List<T> records;保存页面数据
 *     protected long total;总数
 *     page:当前页面,pagesize:页面大小,name,检索内容
 */
public R<Page> getMemberList(int page, int pageSize,String name){//不是json数据,不需要@RequestBody
    log.info("page={},pagesize={},name={}",page,pageSize,name);
    //构建分页构造器
    Page pageInfo = new Page<>(page,pageSize);
    //构建条件构造器
    LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
    //添加过滤条件
    wrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);// org.apache.commons.lang
    //添加排序条件
    wrapper.orderByDesc(Employee::getUpdateTime);
    employeeService.page(pageInfo,wrapper);//封装到pageInfo里
    return R.success(pageInfo);
}

在这之前需要在config文件中去配置一个分页构造器mybatisPlusInterceptor

/**
 * 配置MP分页插件
 */
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}``

二.新增员工

新增员工进入数据库,从前端传来所需要的数据,一些默认数据要靠controller来补充
比如本系统的密码,创建时间/人,修改时间/人

   @PostMapping
    public R<String> addMember(@RequestBody Employee employee,HttpServletRequest request){
        //新增员工到数据库
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes(StandardCharsets.UTF_8)));
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());
        employee.setCreateUser((Long) request.getSession().getAttribute("employee"));
        employee.setUpdateUser((Long) request.getSession().getAttribute("employee"));
        employeeService.save(employee);
        //如果用户名重复则添加失败,全局异常处理器捕获
        // 异常
        return R.success("添加成功!默认密码为123456");
    }

ps.此处可以优化,使用mp的自动填充功能来简化代码,会在后面实现

这时候如果数据库中存在相同用户名的行,则会抛出异常
这个异常会在每个模块的添加都有,所以在common中增加一个全局异常处理器
如果遇到异常中有字段"Duplicate entry",说明遇到了独立字段重复的错误
将异常信息中的 内容分离出来+已存在 然后返回前端

@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2]+ "已存在";
            return  R.error(msg);
        }
        return  R.error("未知错误");
    }
}

三.修改员工信息

rest风格中,修改使用的请求类型是put

```java
@PutMapping
public R<String> update(@RequestBody Employee employee,HttpServletRequest request){
    //修改更新时间
    employee.setUpdateTime(LocalDateTime.now());
    //修改更新人
    employee.setUpdateUser((Long) request.getSession().getAttribute("employee"));
    //修改
    employeeService.updateById(employee);
    return R.success("状态修改成功");
}

修改页面需要去反查询 所修改人员的信息

    @GetMapping("/{id}")
    public R<Employee> selectOne(@PathVariable long id){
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Employee::getId,id);
        //可以直接使用getById
        Employee emp = employeeService.getOne(wrapper);
        return R.success(emp);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值