SpringBoot 项目公共字段填充
[公共字段自动填充]
核心:在切面类中捕获需要填充公共字段的 Mapper 方法,方法上使用注解加以标识,通过反射拿到需要填充的字段赋值方法,进行赋值操作
1、自定义注解 AutoFill
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//数据库操作类型:UPDATE INSERTOperationType value();
}
2、枚举对象类
public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT
}
3、自定义切面 AutoFillAspect
@Aspect
@Component
@Slf4j
public class AutoFillAspect {/*** 切入点*/@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}/*** 前置通知,在通知中进行公共字段的赋值*/@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){log.info("开始进行公共字段自动填充...");//获取到当前被拦截的方法上的数据库操作类型MethodSignature signature = (MethodSignature) joinPoint.getSignature();//方法签名对象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();//就是获取修改人的id值,不同项目不同的获取方法//根据当前不同的操作类型,为对应的属性通过反射来赋值if(operationType == OperationType.INSERT){//为4个公共字段赋值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){//为2个公共字段赋值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();}}}
}
4、在Mapper接口的方法上加入 AutoFill 注解
@Mapper
public interface CategoryMapper {/*** 插入数据* @param category*/@AutoFill(value = OperationType.INSERT)void insert(Category category);/*** 根据id修改分类* @param category*/@AutoFill(value = OperationType.UPDATE)void update(Category category);}
相关文章:
SpringBoot 项目公共字段填充
[公共字段自动填充] 核心:在切面类中捕获需要填充公共字段的 Mapper 方法,方法上使用注解加以标识,通过反射拿到需要填充的字段赋值方法,进行赋值操作 1、自定义注解 AutoFill Target(ElementType.METHOD) Retention(RetentionPo…...
分布式搜索引擎ES
文章目录 初识elasticsearch了解ES倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 安装ES部署kibana安装IK分词器扩展词词典停用词词典 索引库操作mapping映射属性索引库的CRUD创建索引库和映射查询索引库修改索引库删除索引库 文档…...
2023年05月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列程序段的运行结果是?( ) def s(n):if n==0:return 1else:...
@KafkaListener注解详解(一)| 常用参数详解
KafkaListener 注解提供了许多可配置的参数,以便更灵活地定制 Kafka 消息监听器的行为。 topics: 描述: 指定监听的 Kafka 主题,可以是一个字符串数组。这是最基本的参数,它定义了监听器将从哪个或哪些主题接收消息。…...
蓝桥杯算法双周赛心得——被替换的身份证(分类讨论)
大家好,我是晴天学长,分类讨论一定要细节啊,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .被替换的身份证 2) .算法思路 假设一方获胜 1.接受数据 2.假设潜梦醒 无非就是&am…...
实验一:人工智能之启发式搜索算法(含源码+实验报告)
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...
C++学习 --类和对象之封装
目录 1, 什么是封装 2, 创建类 3, 权限控制 3-1, public权限 3-2, private权限 3-3, protected权限 3-4, 类外访问私有属性 4, 构造函数 4-2,创建构造函数 4-2…...
在Spring Boot中使用JTA实现对多数据源的事务管理
了解事务的都知道,在我们日常开发中单单靠事务管理就可以解决绝大多数问题了,但是为啥还要提出JTA这个玩意呢,到底JTA是什么呢?他又是具体来解决啥问题的呢? JTA JTA(Java Transaction API)是…...
介绍YOLO-NAS Pose:姿势估计的技术
YOLO-NAS 姿势 YOLO-NAS Pose models是对 Pose Estimation 领域的最新贡献。今年早些时候,Deci 因其突破性的目标检测基础模型 YOLO-NAS 获得了广泛认可。在 YOLO-NAS 成功的基础上,该公司现在推出了 YOLO-NAS Pose 作为其姿势估计的对应产品。该姿势模型在延迟和准确性之间…...
计算机毕业设计 基于SpringBoot的实训管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
Python开发运维:Python3.7使用QQ邮箱发送不同类型邮件
目录 一、理论 1.邮件发送 二、实验 1.Python3.7使用QQ邮箱发送普通邮件 2.Python3.7使用QQ邮箱发送包含图片与附件的邮件 三、问题 1.Pycharm中如何放大和缩小代码界面 一、理论 1.邮件发送 (1)概念 SMTP(Simple Mail Transfer Pro…...
二十三种设计模式全面解析-解密迭代器模式:探索遍历之道
在软件开发中,遍历数据集合是一个非常常见的需求。但是,如何以一种优雅、灵活的方式遍历集合,并且能够适应各种不同的数据结构和迭代方式,一直是开发者们面临的挑战。今天,我将带你深入探索迭代器模式(Iter…...
kubernetes istio
目录 一、部署 二、部署示例应用 三、部署遥测组件 四、流量管理 五、熔断 官网:https://istio.io/latest/zh/about/service-mesh/ 一、部署 提前准备好文件 tar zxf 15t10-1.19.3-linux-amd64.tar.gz cd 15t10-1.19.3/ export PATH$PWD/bin:$PATHistioctl install …...
25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历
目录 递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 递归遍历 前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # …...
常用布局以及其优缺点
当涉及到设计和排版时,有许多不同的布局方式可供选择。以下是几种常见的布局方式以及它们的优缺点: 流式布局(Fluid Layout): 优点:能够根据屏幕大小自动调整内容,适应不同设备。灵活性高&#…...
海康工业相机如何提高相机帧率
影响帧率的因素 相机参数 帧率限制使能 像素格式 曝光时间 数据包大小(网口) 相机默认参数 ADC位深 系统环境设置...
Linux之IPC通信共享内存(一次拷贝)与消息队列、管道、信号量、socket(两次拷贝)总结(六十二)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
【多线程 - 01、概述】
进程 几乎所有的操作系统都支持进程概念,进程是处于运行过程中的程序,进程是操作系统中进行资源分配的基本单位。 三个基本特征 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。而对于未建立任何进程的程序&…...
SQL SELECT INTO 语句
SQL SELECT INTO 语句 使用 SQL,您可以将信息从一个表中复制到另一个表中。 SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。 SQL SELECT INTO 语法 我们可以把所有的列都复制到新表中: SELECT * INTO newtable [IN ex…...
【刷题】(AtCoder Beginner Contest 328) C、D 补题
前言 第一次打 a了两道 C、D都是TLE 看了其他人的题解之后 有一些想法 所以发一篇博客 C 题干 题目链接 我的思路及做题过程 我的思路是 输入left、right 再在这个区间内计算字母相同的对数 代码是: #include<iostream> #include<cmath> #includ…...
手把手教你为Cursor AI装个‘Figma眼睛’:从零配置MCP服务器到实现设计稿智能问答
为Cursor AI赋予Figma视觉能力:MCP服务器配置与智能设计问答实战 你是否遇到过这样的场景?当你在Figma中精心设计了一个界面,却需要反复在代码编辑器和设计工具之间切换,手动核对每个元素的尺寸、颜色和间距。或者当你想让AI助手基…...
从玩具车到真车:阿克曼模型在ROS与自动驾驶仿真中的配置避坑指南
从玩具车到真车:阿克曼模型在ROS与自动驾驶仿真中的配置避坑指南 当你第一次在Gazebo里加载那辆精致的仿真车模型时,满心期待它能在虚拟世界里优雅地转弯,结果却发现它要么像醉汉一样走S形路线,要么干脆表演原地陀螺——恭喜你&am…...
Ubuntu 22.04蓝牙开关秒关?别慌,用dmesg揪出Intel固件缺失的元凶
Ubuntu 22.04蓝牙故障排查指南:从日志分析到固件修复 当你兴冲冲地想在Ubuntu 22.04上连接蓝牙耳机,却发现开关像被施了魔法一样秒关,这种挫败感我太熟悉了。作为一名长期与Linux硬件问题斗智斗勇的老兵,我发现这类问题往往不是系…...
如何在3分钟内掌握SourceGit:跨平台Git GUI客户端的完整入门指南
如何在3分钟内掌握SourceGit:跨平台Git GUI客户端的完整入门指南 【免费下载链接】sourcegit Windows/macOS/Linux GUI client for GIT users 项目地址: https://gitcode.com/gh_mirrors/so/sourcegit 还在为命令行Git的复杂性而烦恼吗?SourceGit…...
【AIOps时代终极防线】:多模态大模型监控告警体系的5个致命断点与90分钟快速加固方案(含Prometheus+OpenTelemetry+LLM-trace融合配置模板)
第一章:多模态大模型监控告警体系的演进逻辑与AIOps防御范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统单模态监控系统在面对视觉-语言-时序联合推理任务时,已暴露出语义割裂、根因定位延迟超800ms、异常模式泛化能力缺失等结构性瓶颈。多…...
电机控制:PWM 原理与应用
电机控制:PWM原理与应用 在现代工业自动化和智能设备中,电机控制技术扮演着至关重要的角色。其中,脉宽调制(PWM)技术因其高效、灵活的特点,成为电机控制的核心手段之一。无论是家用电器中的风扇调速&#…...
用“看病吃药”和“追剧选片”说透生成式与判别式模型
1. 从看病吃药理解生成式与判别式模型 想象你连续咳嗽三天不见好转,决定去医院就诊。医生通常会做两件事:第一,详细询问你的症状、病史、生活习惯;第二,根据检查结果开具处方。这个过程完美诠释了两种AI模型的本质差异…...
好写作AI查重“透视镜”:让学术不端无处遁形的秘密武器
在学术的浩瀚宇宙中,每一篇论文都是一颗独特的星辰,承载着研究者的智慧与汗水。然而,当抄袭与剽窃的阴霾悄然笼罩,这些星辰的光芒便可能黯淡无光。别怕,好写作AI携其论文查重功能,如同一把精准的“透视镜”…...
GPT-6震撼来袭!OpenAI孤注一掷,能否击退Claude Code?
🔥 开门见山:这次不一样 内部代号 Spud(土豆) 的 GPT-6,**已于 3 月 24 日在德克萨斯 Stargate 数据中心完成预训练,**Greg Brockman 亲口承认它的存在——“这不是增量改进,是我们思考模型开发…...
PADS Layout高效操作指南:如何利用无模命令和快捷键提升PCB设计速度
PADS Layout高效操作指南:如何利用无模命令和快捷键提升PCB设计速度 在PCB设计领域,效率就是竞争力。当项目周期压缩到极限,当设计迭代频繁到令人窒息,那些能够快速完成高质量布局的设计师总能脱颖而出。PADS Layout作为业界广泛使…...
