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里写具体实现 太长了补贴了 很简单