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

字段填充策略 FieldFill

在这里插入图片描述
实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

    @ApiModelProperty("创建时间")@TableField(value = "create_time", fill = FieldFill.INSERT)@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)private Date createTime;@ApiModelProperty("修改人")@TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE)private Long updateUser;@ApiModelProperty("修改用户名称")@TableField(value = "update_user_name", fill = FieldFill.INSERT_UPDATE)private String updateUserName;@ApiModelProperty("修改时间")@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)private Date updateTime;@ApiModelProperty("是否已删除")@TableField("is_deleted")@TableLogicprivate Integer isDeleted;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?
在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:

package com.spang.monitor.common.handler;import com.spang.core.auth.util.AuthUtil;
import com.spang.core.mp.handler.CustomMetaObjectHandler;
import com.spang.core.tool.util.Func;
import org.apache.ibatis.reflection.MetaObject;import java.util.Date;
import java.util.Objects;public class CustomMetaObjectChemicalHandler extends CustomMetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {if (Objects.nonNull(AuthUtil.getUser())) {this.strictInsertFill(metaObject, "tenantId", String.class, AuthUtil.getTenantId());this.strictInsertFill(metaObject, "createUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "createUserName", String.class, AuthUtil.getUser().getRealName());this.strictInsertFill(metaObject, "createDept", Long.class, Func.firstLong(AuthUtil.getUser().getDeptId()));this.strictInsertFill(metaObject, "updateUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "updateUserName", String.class, AuthUtil.getUser().getRealName());}this.strictInsertFill(metaObject, "createTime", Date.class, new Date());this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());}@Overridepublic void updateFill(MetaObject metaObject) {if (Objects.nonNull(AuthUtil.getUser())) {this.setFieldValByName("updateUser", AuthUtil.getUser().getUserId(), metaObject);this.setFieldValByName("updateUserName", AuthUtil.getUser().getRealName(), metaObject);}this.setFieldValByName("updateTime", new Date(), metaObject);}
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package com.spang.core.mp.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.spang.core.auth.util.AuthUtil;
import com.spang.core.tool.util.Func;
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;public class CustomMetaObjectHandler implements MetaObjectHandler {public CustomMetaObjectHandler() {}public void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", Date.class, new Date());if (AuthUtil.getUser() != null) {this.strictInsertFill(metaObject, "createUser", Long.class, AuthUtil.getUser().getUserId());this.strictInsertFill(metaObject, "createDept", Long.class, Func.toLong(AuthUtil.getUser().getDeptId()));}}public void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());if (AuthUtil.getUser() != null) {this.strictInsertFill(metaObject, "updateUser", Long.class, AuthUtil.getUser().getUserId());}}
}

相关文章:

字段填充策略 FieldFill

实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解TableField(fill FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该…...

Docker run 启动容器报错

今天在Windows下启动docker容器发现的三个错误: Ports are not available: exposing port TCP 0.0.0.0:1521 -> 0.0.0.0:0: listen tcp 0.0.0.0:1521: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 端口…...

Golang之路---03 面向对象——类型断言

类型断言 作用 检查 i 是否为 nil检查 i 存储的值是否为某个类型 使用方式 第一种: t : i.(T)这个表达式可以断言一个接口对象(i)里不是 nil,并且接口对象(i)存储的值的类型是 T,如果断言成…...

Atcoder 做题记录

My OI Blog A R C 155 F \mathbb{ARC \ 155 \ F} ARC 155 F E, F 先咕着,做一些多项式题,这篇题解是我人工翻译的 [1] Double Counting 双重计数 考虑从叶子节点开始,用唯一的方式(如果有的话)来构造出一棵满足条件的树…...

C++之观察者模式(发布-订阅)

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系, …...

无头单链表,有完整测试程序

&#x1f35f;无头单链表 &#x1f47b;无头单链表的所有结点都存储有效信息 &#x1f47b;无头单链表相对带头单链表&#xff0c;在有些涉及更改头节点的函数上需要传二级指针 &#x1f35f;头文件list.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #includ…...

2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法

## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c;他与Apriori算法一样也是用来挖掘频繁项集的&#xff0c…...

MySQL做分布式锁

分布式锁mysql实现方式 方式1&#xff1a;唯一索引 创建锁表&#xff0c;内部存在字段表示资源名及资源描述&#xff0c;同一资源名使用数据库唯一性限制。多个进程同时往数据库锁表中写入对某个资源的占有记录&#xff0c;当某个进程成功写入时则表示其获取锁成功其他进程由于…...

Python学习笔记:变量类型、字符串基本操作

1.注释 单行注释 # 单行注释 多行注释 """ 多行注释 """2.变量类型 # 基本变量类型 a 1 # integer b 1.5 # float c string # String d "string" # string e False # boolean # list\tuple\dictionar…...

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的jvm模型图 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致m…...

【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题

目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景&#xff1a;在表格里面嵌入el-…...

通过了PMP考试,还有什么证书值得考?

自从7月24号公布了PMP成绩后&#xff0c;不少伙伴私信小编&#xff1a;通过PMP后还有哪些证书可以提升自己&#xff1f;一来是多份高含金量的证书可以多点竞争力&#xff0c;二来是加持自己的职业发展&#xff01;今天小编就来给大家捋一捋&#xff01; 一.NPDP认证 2016 年 4…...

页面技术基础-html

页面技术基础-html 环境准备&#xff1a;在JDBC中项目上完成代码定义 1. 新建一个 Module:filr->右键 -》Module -》Java-》next->名字(html_day1)->finish 2. 在 Moudle上右键-》第二个选项&#xff1a;add framework .. -> 选择JavaEE下第一个选项 Web Apllicat…...

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found

某项目中&#xff0c;我要给别人封装一个深度学习算法的SDK接口&#xff0c;运行在RK3588平台上&#xff0c;然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误&#xff1a; aarch64-buildroot-linux-gnu-gcc --version /data/chw/aarch64/bin/cca…...

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件&#xff0c;修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…...

Django框架之路由用法

简介 路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序&#xff0c;并返回处理结果&#xff0c;也就是 URL 与 Django 的视图建立映射关系。 Django 路由在 urls.py 配置&#xff0c;urls.py 中的每一条配置对应相应的处理方法。 Django 不同版本 urls.py 配…...

回文链表 LeetCode热题100

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 思路 利用快慢指针找到链表中间节点&#xff0c;反转后半段链表。前半段从头节点开始与后半段比较。 注意当链表节点…...

如何在群晖NAS中使用cpolar内网穿透

如何在群晖nas中使用cpolar内网穿透 文章目录 如何在群晖nas中使用cpolar内网穿透 今天&#xff0c;我们来为大家介绍&#xff0c;如何在群晖系统中&#xff0c;使用图形化界面的cpolar。 cpolar经过图形化改造后&#xff0c;使用方法已经简便了很多&#xff0c;基本与其他应用…...

无头单向不循环链表和带头双向循环链表的创建

Lei宝啊&#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 接下来我们将会了解最基础的链表--->单链表 以及最方便也是最爽的链表--->带头双向循环链表。 若有看不懂之处&#xff0c;可画图或者借鉴这里&#xff1a;反转单链表&#xff0c;对于数据结构而言&am…...

超简单的fastapi链接websocket用例

main.py from typing import Listfrom fastapi import FastAPI, WebSocket, WebSocketDisconnectapp FastAPI()class ConnectionManager:def __init__(self):# 存放激活的ws连接对象self.active_connections: List[WebSocket] []async def connect(self, ws: WebSocket):# 等…...

PS3游戏更新下载器:让经典游戏重获新生的智能工具 [特殊字符]

PS3游戏更新下载器&#xff1a;让经典游戏重获新生的智能工具 &#x1f3ae; 【免费下载链接】PS3GameUpdateDownloader downloader for ps3 game updates (.pkg files) from official sony servers written in python 项目地址: https://gitcode.com/gh_mirrors/ps/PS3GameU…...

手把手教你用ZYNQ和AN108模块实现正弦波生成与采集(附完整Verilog代码)

基于ZYNQ的AD/DA信号闭环系统实战&#xff1a;从正弦波生成到采集验证 在嵌入式信号处理领域&#xff0c;FPGAARM架构的ZYNQ平台因其并行处理能力和灵活配置特性&#xff0c;成为实时信号系统开发的理想选择。本文将构建一个完整的信号闭环验证系统&#xff1a;通过ZYNQ FPGA生…...

跨平台音频下载解决方案:基于Go+Qt5混合架构的技术实现深度解析

跨平台音频下载解决方案&#xff1a;基于GoQt5混合架构的技术实现深度解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内…...

告别Breakpad!在Qt项目中迁移到Google Crashpad的完整指南与踩坑实录

从Breakpad到Crashpad&#xff1a;Qt项目崩溃捕获系统升级实战手册 当你的Qt应用程序在客户现场突然崩溃时&#xff0c;能否快速定位问题可能决定了用户留存率。过去十年间&#xff0c;Google Breakpad一直是C开发者捕获崩溃信息的首选工具&#xff0c;但随着技术演进&#xff…...

Rust的匹配中的区别语义

Rust的匹配机制以其强大的表达能力和安全性著称&#xff0c;而其中的"区别语义"更是其核心特性之一。所谓区别语义&#xff0c;指的是Rust在模式匹配时能够精确区分不同场景下的行为差异&#xff0c;从而避免常见错误并提高代码的可靠性。这种设计使得Rust在处理复杂…...

免费音频编辑神器Audacity:从零基础到专业级的完整指南

免费音频编辑神器Audacity&#xff1a;从零基础到专业级的完整指南 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 在数字内容创作成为主流的今天&#xff0c;音频质量直接影响着作品的专业度和传播效果。然而&am…...

AI写专著实用攻略:4款AI工具助力,20万字专著快速成型!

学术专著写作与AI工具应用 对于学术研究人员来说&#xff0c;写一本学术专著往往不是一时的灵感&#xff0c;而是一场长达好几年的持久战。研究者需要从最开始的选题构思&#xff0c;到构建逻辑清晰的章节框架&#xff0c;接下来是逐字逐句地填充内容和校对文献引用&#xff0…...

告别网盘限速困扰:LinkSwift直链下载助手技术实践指南

告别网盘限速困扰&#xff1a;LinkSwift直链下载助手技术实践指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

小模型在昇腾NPU上的推理部署:【ONNX 模型快速部署】

作者&#xff1a;昇腾实战派 小模型在NPU上的推理部署&#xff1a; 【知识地图】 背景概述 本文为开发者提供一份实用指南&#xff0c;演示如何利用 ONNX Runtime 与 华为 CANN 的对接能力&#xff0c;将通用 ONNX 模型快速部署到昇腾 AI 处理器&#xff08;NPU&#xff09;…...

AIDE手机编程入门指南(零基础启航) 1.1 初探我的第一个Android应用

1. 打开AIDE的第一眼&#xff1a;认识你的"创作工作室" 第一次打开AIDE时&#xff0c;你会看到一个类似文件管理器的界面。这就像你刚搬进一间新工作室&#xff0c;需要先熟悉工具摆放的位置。左上角显示的是当前项目名称&#xff0c;默认会有一个示例项目。点击右下…...