Java-实现公有字段自动注入(创建人、创建时间、修改人、修改时间)

文章目录

  • Mybatis-plus实现自动注入
    • 定义 MetaObjectHandler
    • 配置 MyBatis-Plus 使用 MetaObjectHandler
    • 实体类字段注解
    • 使用服务类进行操作测试
  • Jpa启用审计功能实现自动注入
    • 添加依赖
    • 启动类启用审计功能
    • 实现AuditorAware接口
    • 实体类中使用审计注解
  • 总结

自动注入创建人、创建时间、修改人、修改时间需要根据使用的技术栈进行区别处理,本文介绍Jpa和Mybatis-plus两种方式进行自动注入

Mybatis-plus实现自动注入

在使用 MyBatis-Plus 进行数据库操作时,我们经常需要自动处理一些字段,比如创建人、创建时间、修改人、修改时间等。MyBatis-Plus 提供了多种方式来自动填充这些字段,主要通过 MetaObjectHandler 接口实现。

定义 MetaObjectHandler

首先,你需要定义一个实现了 MetaObjectHandler 接口的类,并重写 insertFill 和 updateFill 方法,用于设置默认的创建人和修改人、创建时间和修改时间。

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {// 创建人this.setFieldValByName("createBy", "admin", metaObject);// 创建时间this.setFieldValByName("createTime", new Date(), metaObject);// 修改人this.setFieldValByName("updateBy", "admin", metaObject);// 修改时间this.setFieldValByName("updateTime", new Date(), metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {// 修改人this.setFieldValByName("updateBy", "admin", metaObject);// 修改时间this.setFieldValByName("updateTime", new Date(), metaObject);}
}

配置 MyBatis-Plus 使用 MetaObjectHandler

确保你的 Spring Boot 应用中已经包含了 MyBatis-Plus 的自动配置,通常在你的 Spring Boot 启动类或者配置类中添加如下配置:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.yourpackage.mapper") // 确保扫描到你的 Mapper 接口包路径
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

实体类字段注解

在你的实体类中,使用 @TableField 注解标记需要自动填充的字段。例如:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;@TableName("your_table")
public class YourEntity {@TableIdprivate Long id;private String name;@TableField(fill = FieldFill.INSERT) // 仅在插入时填充private String createBy;@TableField(fill = FieldFill.INSERT) // 仅在插入时填充private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE) // 在插入和更新时填充private String updateBy;@TableField(fill = FieldFill.INSERT_UPDATE) // 在插入和更新时填充private Date updateTime;// getters and setters...
}

使用服务类进行操作测试

现在,当你使用 MyBatis-Plus 的 Service 类进行数据的插入或更新操作时,MyMetaObjectHandler 中的逻辑会自动触发,填充相应的字段。例如:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.yourpackage.mapper.YourEntityMapper; // 确保这是你的 Mapper 接口全名路径
import com.yourpackage.entity.YourEntity; // 确保这是你的实体类全名路径
import org.springframework.transaction.annotation.Transactional;@Service
public class YourEntityService extends ServiceImpl<YourEntityMapper, YourEntity> {@Transactional // 确保操作在事务中执行,以便自动填充字段正确工作。public void createEntity(YourEntity entity) {this.save(entity); }

Jpa启用审计功能实现自动注入

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

启动类启用审计功能

@SpringBootApplication
@EnableJpaAuditing
public class ManageApplication {public static void main(String[] args) {SpringApplication.run(ManageApplication.class, args);}}

实现AuditorAware接口

@Component
public class SpringSecurityAuditorAware implements AuditorAware<String> {@Overridepublic Optional<String> getCurrentAuditor() {Authentication authentication = SecurityContextHolder.getContext().getAuthentication();if (authentication != null && authentication.isAuthenticated()) {// 获取当前登录用户名String username = authentication.getName();return Optional.of(username);}return Optional.of(authentication.getPrincipal().toString());}
}

实体类中使用审计注解

使用 @CreatedBy、@CreatedDate、@LastModifiedBy 和 @LastModifiedDate 注解来自动记录和更新创建和修改信息。

public class BaseEntity {@TableId(type = IdType.ASSIGN_ID)String id;@CreatedByString createId;@CreatedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date createDate;@LastModifiedByString modifyId;@LastModifiedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date modifyDate;}

总结

Mybatis-plus经过验证可以实现自动注入,Jpa审计功能暂时未进行验证。

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

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

相关文章

金融机构开源软件风险管理体系建设

开源软件为金融行业带来了创新活力的同时&#xff0c;也引入了一系列独特的风险。金融机构需要构建系统化的风险管理体系&#xff0c;以识别和应对开源软件在全生命周期中的各种风险点。下面我们将解析开源软件在金融场景下的主要风险类别&#xff0c;并探讨如何建立健全的风险…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称&#xff0c;Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下&#xff1a; featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…

同花顺客户端公司财报抓取分析

目标客户端下载地址:https://ft.51ifind.com/index.php?c=index&a=download PC版本 主要难点在登陆,获取token中的 jgbsessid (每次重新登录这个字段都会立即失效,且有效期应该是15天的) 抓取jgbsessid 主要通过安装mitmproxy 使用 mitmdump + 下边的脚本实现监听接口…

QT工程建立

打开软件新建一个工程 选择chose 工程命名&#xff0c;选择保存路径&#xff0c;可以自己选择&#xff0c;但是不要有中文路径 默认的直接下一步 任意选一个下一步 点击完成 之后是这个界面&#xff0c;点击右下角的绿色三角形编译一下 实验内容 添加类 第一个是建立cpp和.h文件…

【NLP 53、投机采样加速推理】

目录 一、投机采样 二、投机采样改进&#xff1a;美杜莎模型 流程 改进 三、Deepseek的投机采样 流程 Ⅰ、输入文本预处理 Ⅱ、引导模型预测 Ⅲ、候选集筛选&#xff08;可选&#xff09; Ⅳ、主模型验证 Ⅴ、生成输出与循环 骗你的&#xff0c;其实我在意透了 —— 25.4.4 一、…

ffmpeg时间基与时间戳

时间基、时间戳 时间基&#xff1a;表示时间单位的分数&#xff0c;用来定义视频或音频流中时间的精度。其形式是一个分数&#xff0c;分子通常为 1&#xff0c;而分母则表示每秒的单位数。 时间戳&#xff1a;代表在时间轴里占了多少个格子&#xff0c;是特定的时间点。 时间…

激光加工中平面倾斜度的矫正

在激光加工中&#xff0c;加工平面的倾斜度矫正至关重要&#xff0c;直接影响加工精度和材料处理效果。以下是系统的矫正方法和步骤&#xff1a; 5. 验证与迭代 二次测量&#xff1a;加工后重新检测平面度&#xff0c;确认残余误差。 反馈优化&#xff1a;根据误差分布修正补偿…

算法刷题记录——LeetCode篇(2.2) [第111~120题](持续更新)

更新时间&#xff1a;2025-04-04 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 114. 二叉树展开为链表 给你二…

C语言学习笔记-9

九、结构体 构造类型&#xff1a; 不是基本类型的数据结构也不是指针类型&#xff0c; 它是若干个相同或不同类型的数据构成的集合 结构体类型&#xff1a; 结构体是一种构造类型的数据结构&#xff0c;是一种或多种基本类型或构造类型的数据的集合。 1.结构体类型定义 定…

Test——BUG篇

目录 一软件测试的生命周期 二BUG 1概念 2描述Bug 3Bug级别 4Bug的生命周期 三与开发人员发生争执怎么办 ​编辑1先自省&#xff1a;是否Bug描述不清晰 2站在用户角度考虑并抛出问题 3Bug定级有理有据 4不仅要提出问题&#xff0c;还要给出解决方案 5Bug评审 5.1…

【Block总结】HWAB,半小波注意力块|即插即用

论文信息 标题: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 创新点 改进的分层架构 M-Net+: 提出了一个专为低光图像增强设计的改良分层模型 M-Net+。该架构旨在缓解采样过程中的空间信息损失问题。通过采用…

Spring 中的事务

&#x1f9fe; 一、什么是事务&#xff1f; &#x1f9e0; 通俗理解&#xff1a; 事务 一组操作&#xff0c;要么全部成功&#xff0c;要么全部失败&#xff0c;不能只做一半。 比如你转账&#xff1a; A 账户扣钱B 账户加钱 如果 A 扣了钱但 B 没收到&#xff0c;那就出问…

Flutter极速接入IM聊天功能并支持鸿蒙

Flutter极速接入IM聊天功能并支持鸿蒙 如果你们也是Flutter项目&#xff0c;想快速接入聊天&#xff0c;包括聊天的UI界面&#xff0c;强烈推荐这一家。因为我们已经完成了集成&#xff0c;使用非常稳定&#xff0c;集成也非常快捷方便。 而且&#xff0c;就在今天&#xff0c…

C# 类库生成后自动复制到指定目录

C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-产品经理-产品多分支平台管理

禅道16.0版本开始&#xff0c;优化和增强了产品的分支/平台功能&#xff0c;主要特点如下&#xff1a; 多分支/平台功能兼容各种大小型项目&#xff0c;项目/迭代可以关联对应产品的某个分支/平台。分支/平台支持灵活管理&#xff0c;可以把分支/平台理解为时间层面的概念&…

手搓多模态-04 归一化介绍

在机器学习中&#xff0c;归一化是一个非常重要的工具&#xff0c;它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中&#xff0c;也有用到归一化层&#xff0c;如下代码所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…

Qt 入门 1 之第一个程序 Hello World

Qt 入门1之第一个程序 Hello World 直接上操作步骤从头开始认识&#xff0c;打开Qt Creator&#xff0c;创建一个新项目&#xff0c;并依次执行以下操作 在Qt Creator中&#xff0c;一个Kits 表示一个完整的构建环境&#xff0c;包括编译器、Qt版本、调试器等。在上图中可以直…

深入理解MySQL:核心特性、优化与实践指南

MySQL是一个开源的关系型数据库管理系统(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;目前属于Oracle公司。它是目前世界上最流行的开源数据库之一&#xff0c;广泛应用于各种规模的Web应用和企业系统中。 目录 一、核心特点 关系型数据库&#xff1a; 开源免费&am…

Linux 系统安装与优化全攻略:打造高效开发环境

一、开篇引言 &#xff08;一&#xff09;Linux 系统的广泛应用 Linux 凭借其开源、稳定且安全的特性&#xff0c;在服务器、嵌入式设备以及开发环境等领域都有着极为广泛的应用。 &#xff08;二&#xff09;撰写本文的目的 为读者提供一套全面且实用的指南&#xff0c;助…

代码训练day22回溯算法p1

1.组合 &#xff08;1&#xff09;模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&#…