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

news2024/9/29 7:21:53

公共字段自动填充

 代码实现

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<Long> 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<Category> pageInfo =new Page<>(page,pageSize);
    LambdaQueryWrapper<Category> 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<Dish> dishLambdaQueryWrapper =new LambdaQueryWrapper<>();
    //添加查询条件,根据分类id进行查询
    dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
    long count1 = dishService.count(dishLambdaQueryWrapper);
    //查询当前分类是否已关联菜品,如果已经关联,抛出一个业务异常
    if(count1>0){
        //已经关联菜品,抛出一个业务异常
        throw new CustomException("当前分类下关联了菜品,不能删除");
    }


    LambdaQueryWrapper<Setmeal> 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());
}

修改分类 过于简单,就不在这写了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库实验六:存储过程实验

实验六 存储过程实验 实验6.1 存储过程实验 1.实验目的 ​ 掌握数据库PL/SQL编程语言&#xff0c;以及数据库存储过程的设计和使用方法。 2.实验内容和要求 ​ 存储过程定义&#xff0c;存储过程运行&#xff0c;存储过程更名&#xff0c;存储过程删除&#xff0c;存储过程…

[附源码]Python计算机毕业设计Django少儿节目智能推荐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Oracle数据的备份和恢复

Oracle数据的备份和恢复 ​ 当我们使用一个数据库时,总希望数据是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故…

logistic回归的标准化回归系数 计算方式

创建于&#xff1a;2022.12.17 修改于&#xff1a;2022.12.17 文章目录1、未标准化回归系数2、标准化回归系数3、两者的区别4、手动计算5、计算样例6、参考资料1、未标准化回归系数 通常我们在构建多因素回归模型时&#xff0c;方程中呈现的是未标准化回归系数&#xff0c;它是…

【财务】财务分析---管理报告体系搭建

财务分析体系搭建的是一个系统化的功能&#xff0c;涉及的业务面非常广&#xff0c;财务分析也能表现出清晰的数据&#xff0c;以此进行改善&#xff1b;本文作者详细分析了财务分析中的管理报告体系的搭建&#xff0c;我们一起来看一下。 一、理清核算、财报、管报、预算关系 …

java设计模式(下)

文章目录第六章 行为型模式(11种)6.1 观察者模式6.1.1 观察者模式介绍6.1.2 观察者模式原理6.1.3 观察者模式实现6.1.4 观察者模式应用实例6.1.5 观察者模式总结6.2 模板方法模式6.2.1 模板方法模式介绍6.2.2 模板方法模式原理6.2.3 模板方法模式实现6.2.4 模板方法模式应用实例…

计算机网络——PPP协议与HDLC协议

广域网 广域网通常跨接很大的1物理范围&#xff0c;所覆盖的范围从几十公里到几千公里&#xff0c;他能链接多个城市或者国家&#xff0c;并且横跨几个州并能提供远距离通信。 广域网的通信子网使用的分组交换技术&#xff0c;广域网的通信子网可以利用公用分局交换网&#xf…

我也“阳”了

大家好&#xff0c;我是哪吒&#xff0c;我也“阳”了&#xff0c;现在是北京时间2022年12月17日 18:36&#xff0c;这篇文章简单说一下我“阳”了的经历和感受。 昨天下午&#xff0c;发现嗓子疼&#xff0c;不舒服&#xff0c;喝了很多茶水&#xff0c;喝了一瓶蓝芩口服液&a…

【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)

一、RDD的概念 RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff0c;即弹性分布式数据集&#xff0c;是一个容错的、并行的数据结构&#xff0c;可以让用户显式地将数据存储到磁盘和内存中&#xff0c;并且还能控制数据的分区。不同RDD之间可以通过转换操作…

SLAM 几何基础

SLAM 几何基础1. 向量运算及其几何意义1.1 内积1.1.1 内积定义1.1.2 内积几何意义1.1.3 内积微分性质1.2 外积1.2.1 外积定义1.2.2 外积几何意义1.2.3 外积微分性质2. 线面特征运算2.1 点到直线距离2.2 点到平面距离Reference:深蓝学院-多传感器融合 1. 向量运算及其几何意义 …

QT系列第4节 QT包含模块以及常用的数据类型和容器

QT中包含很多模块&#xff0c;这些模块都是建立在常用数据类型和容器基础之上的。本篇简单介绍一下常用模块&#xff0c;常用数据类型&#xff0c;常用容器类。 目录 1.QT模块分类 2.QT基本数据类型 3.QString和QByteArray区别 4.QT中的容器 1.QT模块分类 &#xff08;1&…

jdk11新特性——更简化的编译运行程序

目录一、概述二、注意事项三、注意事项1——代码示例3.1、示例13.2、示例23.3、示例3四、注意事项2——代码示例4.1、示例14.2、示例2一、概述 JEP 330 : 增强java启动器支持运行单个java源代码文件的程序。 在我们的认知里面&#xff0c;要运行一个 Java 源代码必须先编译&am…

CentOS 8:FTP服务器

FTP服务器 vsftpd , 是 CentOS 系统自带的 FTP 服务 其中&#xff0c;d 表示 daemon , 后台、守护进程的意思 FTP文件传递示意图&#xff1a; 检查 vsftpd 是否安装 ls /usr/sbin/vsftpd 安装vsftpd软件包 yum install vsftpd 其中&#xff0c;yum 是 CentOS 下的软件包…

低代码平台丨仪表盘实用技巧—【倒计时】

学生时代&#xff0c;我们经常能够看到所谓的中考倒计时、高考倒计时…… 这些白纸黑字的倒计时看板&#xff0c;不仅贯穿着我们的学生生涯。在步入职场之后&#xff0c;随之而来的项目倒计时、季度倒计时&#xff0c;年度倒计时……各种各样的倒计时看板&#xff0c;充斥着我…

卷积神经网络-基础篇Basic-CNN

卷积神经网络-基础篇Basic-CNN CNN的全称是"Convolutional Neural Network"(卷积神经网络)。而神经网络是一种模仿生物神经网络&#xff08;动物的中枢神经系统&#xff0c;特别是大脑&#xff09;结构和功能的数学模型或计算模型。 CNN原理 CNN被广泛应用在图像识…

Supervisor详解

是用Python开发的一个client/server服务&#xff0c;是Linux/Unix系统下的一个进程管理工具&#xff0c;不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程&#xff0c;当一个进程意外被杀死&#xff0c;supervisort监听到进程死…

蓝桥杯C/C++百校真题赛(1期)Day1题解(九进制转十进制、数字三角形)

Q1 进制转化 进制转化&#xff0c;口算啥的都行。 #include <iostream> using namespace std; int main() {cout << 2 2 * 9 2 * 9 * 9 * 9 << endl;return 0; }Q2 数字三角形 #include<iostream> using namespace std;const int N 110; int f[N][…

QT 项目 智能家居系统 上位机

有哪些文件 &#xff1a; 头文件&#xff1a; 1. auidio .h 语音识别 模块 2. camera.h 人脸识别登录模块 3. chooselevelscene.h 翻金币游戏的 4. dataconfig.h 翻金币游戏的 关卡 的数据 5.entry_mode.h 登录方式的界面类 6.luck_draw.h 开心一天的界面类 …

[附源码]Node.js计算机毕业设计公司办公自动化系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

CS61A Proj 4

更好的阅读体验 Project 4: Scheme Interpreter Eval calls apply, which just calls eval again! When does it all end? Introduction Note: If you’re interested in an alternate version of this project that gives you considerably less scaffolding and guidanc…