CYueblog

导航

day03

可以发现代码的comtroller层 太多的更新时间重复代码了 非常不利于维护 怎么解决呢

用mp自带的自动添加 在注册和更新时候 页面信息带到 controller 然后更新和注册一定要经过mp这时候拦截自动添加可以省去很多重复代码

拦截的代码为

 @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", new Long(1));
        metaObject.setValue("updateUser", new Long(1));
        //在这里写错了 这里插入时所有都写 不能光写插入

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", new Long(1));
    }
}

 

 

公共字段自动填充-代码实现并测试

    不同的用户进行操作 更新用户应该不同 怎么办呢 利用线程来解决 把线程名字改成当前用户id 在过滤器里改 然后直接在MetaObjectHandle里用

common类里
public class BaseContext {

    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }

    public static Long getCurrentId(){
        return threadLocal.get();
    }
}
、、filter里
 if(request.getSession().getAttribute("employee")!=null){

          long empId = (long)request.getSession().getAttribute("employee");
            BaseContext.setCurrentId(empId);
            log.info("{}",BaseContext.getCurrentId());
            filterChain.doFilter(request,response);
            return;
        }
  metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", BaseContext.getCurrentId());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
        //在这里写错了 这里插入时所有都写 不能光写插入BaseContext.getCurrentId()

这里的坑是过滤器一定要最后放掉 不能放掉在操作别的

新增分类-需求分析&数据模型&代码开发&功能测试

添加菜品 就是先创建那基层的基本信息 代码是这样:

    @PostMapping
    private R<String> save(@RequestBody Category category){
        categoryService.save(category);
        return R.success("新增分类成功");
    }

在页面添加 页面把信息传到comtroller 有service调用 转到mapper 添加到数据库

分类信息分页查询

    @GetMapping("/page")
    public   R<Page> page(int page,int pageSize){
        Page<Category> pageInfo = new Page<>(page,pageSize);
        LambdaQueryWrapper<Category> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(Category::getSort);
        categoryService.page(pageInfo,queryWrapper);
        return R.success(pageInfo);
    }

插入的代码 跟之前大同小异 坑在pagesize 我因为没区分大小写 一定要跟 前端的代码一直

想要删除某类套餐 要看是不是跟 某类菜品关联 所以要先确认 确认之后 如果不对抛出异常 异常分两步 在common里自己创建一个

package org.example.reggie.common;

public class CustomException extends RuntimeException{
    public CustomException (String message){
        super(message);
    }
}

然后再错误拦截器里弄一个拦截 一定要有注释 注释里写类名

  @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException customException){
        return R.error(customException.getMessage());
    }

 

 然后写查找 这个简单 在service 接口里写方法 然后去 impl里写具体实现 太长了补贴了 很简单 

 


posted on 2022-05-07 17:38  唱月CY  阅读(19)  评论(0编辑  收藏  举报