java 瑞吉外卖day3 公共字段自动填充 新增分类

公共字段自动填充

java 瑞吉外卖day3 公共字段自动填充 新增分类

代码实现

java 瑞吉外卖day3 公共字段自动填充 新增分类

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中提供的一个类。

java 瑞吉外卖day3 公共字段自动填充 新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类

先在过滤器类用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());
    }
}

新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类
@PostMapping
public R save(HttpServletRequest request, @RequestBody Category category){

    categoryService.save(category);
    return new R(1,"添加成功");
}

分类信息分页查询

java 瑞吉外卖day3 公共字段自动填充 新增分类
@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);
}

删除分类(当分类关联了菜品或者套餐时,此分类不允许删除)

java 瑞吉外卖day3 公共字段自动填充 新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类

java 瑞吉外卖day3 公共字段自动填充 新增分类
/**
 * 自定义业务异常
 */
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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球