苍穹外卖——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);

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

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

相关文章

从入门到精通:SQL 100个关键技术关键词

无论你是刚刚接触数据库管理的新手,还是希望提升技能水平的数据分析师,掌握SQL都是至关重要的一步。SQL是一种强大的工具,用于管理和操作关系型数据库。从简单的数据检索到复杂的事务处理,SQL提供了广泛的功能来满足各种需求。为了…

软件设计师:01计算机组成与结构

文章目录 一、校验码1.奇偶校验码2.海明码3.循环冗余检验码 二、原码反码补码移码三、浮点数表示法1.浮点数相加时 四、寻址方式五、CPU1.访问速度2.cpu的组成 六、RISC和CISC&#xff08;<font color red>只用记住不同就可以&#xff09;七、冗余技术1.结构冗余2.信息冗…

unix中的vfork函数

一、前言 本文介绍unix中的vfork函数&#xff0c;vfork函数功能和fork函数类似&#xff0c;也是用于创建新的进程&#xff0c;只不过调用vfork函数创建的子进程将共享父进程的进程空间&#xff0c;且只有当子进程调用exec()或者exit()函数后&#xff0c;父进程才会继续运行。 …

统信服务器操作系统【Cron定时任务服务】

Cron定时任务服务服务介绍、服务管理、服务配置 文章目录 一、功能概述二、功能介绍1. Cron 服务管理2.Cron 服务管理3.Cron 服务配置run-parts一、功能概述 cron是一个可以用来根据时间、日期、月份、星期的组合来 调度对周期性任务执行的守护进程。利用 cron 所提供的功能,可…

苹果电脑系统重磅更新——macOS Sequoia 15 系统 新功能一 览

有了 macoS Sequoia&#xff0c;你的工作效率将再次提升&#xff1a;快速调整桌面布局&#xff0c;一目了然地浏览网页重点&#xff0c;还可以通过无线镜像功能操控你的iPhone。 下面就来看看几项出色新功能&#xff0c;还有能够全面发挥这些功能的 App 和游戏。 macOS Sequo…

Vue 中 watch 的使用方法及注意事项

前言 Vue 的 Watch 是一个非常有用的功能&#xff0c;它能够监听 Vue 实例数据的变化并执行相应的操作。本篇文章将详细介绍 Vue Watch 的使用方法和注意事项&#xff0c;让你能够充分利用 Watch 来解决 Vue 开发中的各种问题。 1. Watch 是什么&#xff1f; 1.1 Watch 的作…

NVIDIA发布端到端自动驾驶框架Hydra-MDP

自动驾驶是目前人工智能领域的一个主要分支&#xff0c;目前特斯拉的FSD确实是为数不多的大模型框架。与其说特斯拉是一个造车公司&#xff0c;不如说是一个人工智能大数据公司。特斯拉每天靠行驶在道路上的汽车搜集的道路数据不胜其数&#xff0c;而拥有海量的数据是人工智能领…

数据结构——顺序表、链表

目录 前言 一&#xff0c;数据结构 1&#xff0c;什么是数据结构&#xff1f; 2&#xff0c;有什么类型&#xff1f; 二&#xff0c;顺序表 1&#xff0c;线性表 2&#xff0c;顺序表基本结构 3&#xff0c;动态顺序表的功能实现 三&#xff0c;链表 1&#xff0c;链…

乌克兰因安全风险首次禁用Telegram

据BleepingComputer消息&#xff0c;乌克兰国家网络安全协调中心 &#xff08;NCCC&#xff09; 以国家安全为由&#xff0c;已下令限制在政府机构、军事单位和关键基础设施内使用 Telegram 消息应用程序。 这一消息通过NCCC的官方 Facebook 账号对外发布&#xff0c;在公告中乌…

2024icpc(Ⅱ)网络赛补题 L

L、502 Bad Gateway 题意&#xff1a; 给定一个 T T T&#xff0c;每一步可以做以下两个操作&#xff1a; 1、减1 2、随机重置为 [ 1 , T ] [1,T] [1,T]中的某个整数 求在最优策略下&#xff0c;得到 0 0 0的期望步数 思路&#xff1a; 最优策略为选择一个阈值 S S S&…

01.系统IO

文章的函数说明只是简单的说明&#xff0c;具体还得查看man手册 Linux文件说明 linux下一切皆是文件。 Linux 下的文件类型&#xff1a; 1&#xff0c;普通文件&#xff08;regular&#xff09;&#xff1a;存在于外部存储器中&#xff0c;用于存储普通数据。 2&#xff0…

深入理解音视频pts,dts,time_base以及时间数学公式

引入 首先介绍一下基础名词 DTS&#xff08;Decoding Time Stamp&#xff09;&#xff1a;即解码时间戳&#xff0c;这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。当数据没b帧时&#xff0c;dts pts&#xff0c;有兴趣可参阅我前面视频知识类文章。 PTS&a…

统信服务器操作系统【开机自启动】配置方法

开机自启动的四种配置方法,包括systemctl命令、rc.local文件、crontab任务,通过desktop配置开机自动,前三种方法适合后台程序或者脚本启动,最后一种方法适合图形化程序启动。 文章目录 准备环境配置方法一、通过编写service的方法,使用systemctl配置开机自启二、通过rc.lo…

展锐平台的手机camera 系统isptool 架构

展锐平台的isptool 主要用于支持展锐各代芯片isp的各效果模块快速tuning和参数生成打包。 具体需要&#xff1a; 一、工具段能在线实时预览到调试sensor经过isp 处理后的图像&#xff0c;也就是各模块的参数在当下实时生效&#xff0c;通过工具能在PC 上在线观看到修改的效果。…

【企业微信】群机器人自动消息配置

0、群聊机器人 内部企微群聊可以添加一个机器人&#xff0c;这个机器人其实是个消息接口&#xff0c;可以外部脚本来自动定时发送消息到群里&#xff0c;打工人最有用的提醒就是每周提醒发周报了。 1、创建机器人 一般公司都没有人使用&#xff0c;我们可以手动创建一个。 …

小程序开发设计-小程序的宿主环境:宿主环境简介⑥

上一篇文章导航&#xff1a; 小程序开发设计-小程序代码的构成&#xff1a;小程序页面的组成部分详解⑤-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142306902?spm1001.2014.3001.5501 注&#xff1a;不同版本选项有所不同&#xff0c;并无大碍。 目录 上…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【用户态内存调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存…

2024在线翻译工具横评:准确率、速度与易用性大比拼

在日常的学习与生活中&#xff0c;翻译工具无疑成为了我们迅速获取国际新闻与知识的得力助手。起初&#xff0c;我倾向于依赖有道在线翻译这一平台来解决我的语言障碍问题。然而&#xff0c;随着对翻译质量要求的提升和多元化比较的需求增加&#xff0c;我进一步探索并发现了数…

从入门到精通:计算机视觉学习路线与实战项目推荐

全面解析计算机视觉的学习路径&#xff0c;深入探讨关键技术与实战项目&#xff0c;助您快速掌握核心技能 引言 随着人工智能的飞速发展&#xff0c;计算机视觉已成为AI领域中最具潜力和应用价值的分支之一。从自动驾驶到医疗影像分析&#xff0c;计算机视觉技术正在改变我们的…

vue/配置axios(前后端数据连通/api接口的调用)

1.创建apis文件 2.写入调用的api地址且暴露出去。 import httpInstance from /utils/http;export function getHomeNav() {return httpInstance({url: http://10.0.11.91:91/dailyreport/getdailyreportall,}) }3.创建文件编写拦截器 代码部分 //axios基础封装 import axio…