公共字段自动填充
代码实现
1.
@TableField(fill = FieldFill.INSERT)//插入时填充字段
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充字段
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
2.
time我们可以用LocalDateTime方法,但是ID 我们需要动态接收,MetaObjectHandler不支持获得HttpSession
可以使用 ThreadLocal来解决此问题,它是JDK中提供的一个类。
先在过滤器类用set方法把id存进去
再在metaObjectHandler的get方法取出id然后设置
编写BaseContext工具类,基于ThreadLocal封装的工具类
public class BaseContext {
private static ThreadLocal threadLocal =new ThreadLocal<>();
public static void setCurrentId(Long id){
threadLocal.set(id);
}
public static Long getCurrentId(){
return threadLocal.get();
}
}
在LoginCheckFilter的doFilter方法中调用BaseContext来设置当前登录用户的id
在MyMetaObjectHandler的方法中调用BaseContext获取登录用户的id
最终MyMetaObjectHandler:
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入的时候自动填充
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createUser", BaseContext.getCurrentId());
metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
}
新增分类
@PostMapping
public R save(HttpServletRequest request, @RequestBody Category category){
categoryService.save(category);
return new R(1,"添加成功");
}
分类信息分页查询
@GetMapping("/page")
public R page(int page,int pageSize){
Page pageInfo =new Page<>(page,pageSize);
LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.orderByAsc(Category::getSort);
categoryService.page(pageInfo,queryWrapper);
return new R(1,"查询成功",pageInfo);
}
删除分类(当分类关联了菜品或者套餐时,此分类不允许删除)
/**
* 自定义业务异常
*/
public class CustomException extends RuntimeException{
public CustomException(String message){
super(message);
}
}
CategoryServiceImpl:
@Autowired
private DishService dishService;
@Autowired
private SetmealService setmealService;
/**
* 根据id删除分类,删除之前要进行判断
* @param id
*/
@Override
public void remove(Long id) {
LambdaQueryWrapper dishLambdaQueryWrapper =new LambdaQueryWrapper<>();
//添加查询条件,根据分类id进行查询
dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
long count1 = dishService.count(dishLambdaQueryWrapper);
//查询当前分类是否已关联菜品,如果已经关联,抛出一个业务异常
if(count1>0){
//已经关联菜品,抛出一个业务异常
throw new CustomException("当前分类下关联了菜品,不能删除");
}
LambdaQueryWrapper setmealLambdaQueryWrapper =new LambdaQueryWrapper<>();
setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
long count2 = setmealService.count(setmealLambdaQueryWrapper);
//查询当前分类是否已关联套餐,如果已经关联,抛出一个业务异常
if (count2>0){
//已经关联套餐,抛出一个业务异常
throw new CustomException("当前分类下关联了套餐,不能删除");
}
//最终执行删除操作
super.removeById(id);
}
在我们之前写的GlobalExceptionHandler下写异常handler
@ExceptionHandler(CustomException.class)
public R exceptionHandler(CustomException ex){
log.error(ex.getMessage());
//返回失败信息
return new R(0,ex.getMessage());
}
修改分类 过于简单,就不在这写了
Original: https://blog.csdn.net/m0_73859807/article/details/128352756
Author: M00SE
Title: java 瑞吉外卖day3 公共字段自动填充 新增分类
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/724178/
转载文章受原作者版权保护。转载请注明原作者出处!