当前位置: 首页 > news >正文

苍穹外卖——day3

1.公共字段自动填充

我们在添加功能的时候常常要重复执行一些重复的操作

如下图

我们在执行update或者insert数据库操作的时候,总是要给下面的一些属性赋值

这样如果代码功能一多,这会显得代码很冗长

所以我们引入了公共字段自动填充这个功能的实现

那么如何来实现它呢?

下图简单的介绍了一下实现方法

要实现这个功能我们要学会一些知识

枚举

枚举,我们很熟悉,但是我们忘记如何使用

其实很简单

就是定义一个枚举类

然后在类中定义出我们要枚举的事物

如这个功能是实现就是要枚举出update,insert

简单来说就是把两个事物存在这个枚举类中,然后我们直接调用其中一个就是了

如果到现在还不理解的话

接下来去看下面的实现代码就一目了然了

AOP面向切面编程

这个没什么好说的,这个挺复杂的,一下子肯定说不清

之前笔记有单独写的,自己去看,这个很重要,一定要掌握

反射

这个,在学Java的那个400集课程学过了

不过现在已经忘记了

这个也很重要

到时候一定要去弄明白

很多东西都要通过反射来实现

上面都是文字概述

接下来都是代码

建议看不懂上面

可以来看看代码

看了就懂了

代码实现

首先是枚举类

public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT}

然后是注解类

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//利用枚举类来确定数据库操作类型OperationType value();
}

然后是自定义切面类

/*
* 自定义切面类
* */
@Aspect
@Component
@Slf4j
public class AutoFillAspect {@Pointcut("execution(* com.sky.mapper.*.*(..))&&@annotation(com.sky.annotation.AutoFill)")//个人认为前面可以省略,只留@annotation(com.sky.annotation.AutoFill)就行public void autoFillPointCut(){}/** 前置通知,在通知中进行公共字段的赋值* */@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){log.info("开始进行公共字段自动填充...");//这个要自己导的包才不会报错,不然下面调用method()会报错// import org.aspectj.lang.reflect.MethodSignature;MethodSignature signature= (MethodSignature) joinPoint.getSignature();//TODO getClass还是getMethod?AutoFill autoFill=signature.getMethod().getAnnotation(AutoFill.class);OperationType operationType=autoFill.value();Object[] args=joinPoint.getArgs();if(args==null||args.length==0){return;}Object entity=args[0];//开始赋值LocalDateTime now=LocalDateTime.now();Long currentId= BaseContext.getCurrentId();if(operationType==OperationType.INSERT){try {Method setCreateTime=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME,LocalDateTime.class);Method setCreateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER,Long.class);Method setUpdateTime=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME,LocalDateTime.class);Method setUpdateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class);setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentId);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);}catch (Exception e){e.printStackTrace();}}else if(operationType==OperationType.UPDATE){try {Method setUpdateTime=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME,LocalDateTime.class);Method setUpdateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);}catch (Exception e){e.printStackTrace();}}}
}

之后就是给mapper层的数据库操作是update,insert的作上注解标记就行了

 @AutoFill(OperationType.UPDATE)void update(Employee employee);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 双击热备 Electron网页客户端
  • k8s上安装prometheus
  • C++的哲学思想
  • Rust 文件与 IO
  • 2.gitlab ce 细粒度的权限控制
  • SQL查询中的数据处理:利用IFNULL处理NULL值
  • 9月23日
  • 大厂面试真题:SpringBoot的核心注解
  • 微软推迟在MDM设备上启用OOBE强制更新 因为IT管理员反馈称缺乏控制
  • 交易验证码识别数据集
  • Python:百度贴吧实现自动化签到
  • 人工智能课程实训方案
  • Vue3(二)计算属性Computed,监视属性watch,watchEffect,标签的ref属性,propos属性,生命周期,自定义hook
  • html+css(如何用css做出京东页面,静态版)
  • Directives Vue3 自定义指令
  • Apache Spark Streaming 使用实例
  • C++11: atomic 头文件
  • CSS魔法堂:Absolute Positioning就这个样
  • If…else
  • JavaScript 基础知识 - 入门篇(一)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Node项目之评分系统(二)- 数据库设计
  • PHP那些事儿
  • SpiderData 2019年2月23日 DApp数据排行榜
  • springMvc学习笔记(2)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue自定义指令实现v-tap插件
  • 阿里云Kubernetes容器服务上体验Knative
  • 半理解系列--Promise的进化史
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 官方解决所有 npm 全局安装权限问题
  • 强力优化Rancher k8s中国区的使用体验
  • 小程序开发之路(一)
  • 一道面试题引发的“血案”
  • 正则与JS中的正则
  • 追踪解析 FutureTask 源码
  • ionic入门之数据绑定显示-1
  • 国内开源镜像站点
  • # 透过事物看本质的能力怎么培养?
  • #Z0458. 树的中心2
  • #预处理和函数的对比以及条件编译
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (c语言)strcpy函数用法
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (备忘)Java Map 遍历
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十三)MipMap
  • (数据结构)顺序表的定义
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (自用)网络编程
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Family_物联网