在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

SQL语句中如何实现公共字段的自动填充方法

95次阅读
没有评论

共计 2189 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍了 SQL 语句中如何实现公共字段的自动填充方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

1. 前言

我们在设计数据库的时候一定会带上新增、更新的时间、操作者等审计信息。之所以带这些信息是因为假如有一天公司的数据库被人为删了,尽管可能有数据库备份可以恢复数据。但是我们仍然需要追踪到这个事是谁干的,在什么时间干的,具体干了哪些事等等,方便定责和修补。但是我们变更每条数据都要去显式变更这些信息就十分繁琐,我们希望无感知的来处理这些信息。

2. 通用方式

那么有什么好的解决思路呢?在 Spring Data 框架中提供 @CreatedBy 和 @LastModifiedBy 来捕捉谁创建或修改的实体以及 @CreatedDate 和 @LastModifiedDate 来捕捉合适创建或修改了实体。如果你使用相关的框架就可以使用这些特性。那么其实我们知道国内 Spring Data JDBC、Spring Data JPA 并不是主流,主流的是 Mybatis。那么我们有哪些选择?

2.1 开发 Mybatis 审计插件

如果你使用了原生的 Mybatis 可以编写一个审计插件来实现这些功能。我在之前讲解过 Mybatis 插件的教程,并不是非常难的事。如果你想拿来就用,其实 GitHub 上提供了很多可供选择的 Mybatis 审计组件,本来我打算手写一个,但是确实人家写的好。你可以通过关键词 Mybatis Audit 来搜索到它们选择一款最适合你的。

2.2 Mybatis Plus 自动填充

如果你使用了 Mybatis Plus,可以借助于其自动填充功能来实现。

基于 Mybatis Plus 3.3.0

只需要实现 MetaObjectHandler 接口:

@Component
public class MybatisAuditHandler implements MetaObjectHandler {
 @Override
 public void insertFill(MetaObject metaObject) {
 //  声明自动填充字段的逻辑。 String userId = AuthHolder.getCurrentUserId();
 this.strictInsertFill(metaObject, creator ,String.class, userId);
 this.strictInsertFill(metaObject, createTime , LocalDateTime.class,LocalDateTime.now());
 }
 @Override
 public void updateFill(MetaObject metaObject) {
 //  声明自动填充字段的逻辑。 String userId = AuthHolder.getCurrentUserId();
 this.strictUpdateFill(metaObject, updater ,String.class,userId);
 this.strictUpdateFill(metaObject, updateTime , LocalDateTime.class,LocalDateTime.now());
 }
}

然后我们扩展一下 Mybatis Plus 的 Model T 把公共审计字段放进去并声明对应的填充策略:

public abstract class BaseEntity T extends Model ?  extends Model T  { @TableField(fill = FieldFill.INSERT)
 private String creator;
 @TableField(fill = FieldFill.INSERT)
 private LocalDateTime addTime;
 @TableField(fill = FieldFill.UPDATE)
 private String updater;
 @TableField(fill = FieldFill.UPDATE)
 private LocalDateTime updateTime;
}

最后我们的实体类不再直接继承 Model T 改为上面的 BaseEntity T:

@Data
@EqualsAndHashCode(callSuper = false)
public class UserInfo extends BaseEntity UserInfo  { @TableId(value =  user_id , type = IdType.ASSIGN_ID)
 private String userId;
 private String username;
 @Override
 protected Serializable pkVal() {
 return this.userId;
 }
}

这样我们就不用再关心这几个公共字段了,当然你可以根据需要添加更多你需要填充的字段。

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“SQL 语句中如何实现公共字段的自动填充方法”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2189字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日本爱爱小视频 | 综合小说| 精品国产日韩一区三区 | 国产男女爱视频在线观看 | 亚洲精品乱码久久久久久日本蜜臀 | 人妻少妇精品视频二区 | 久久久久国产精品人妻aⅴ网站 | 天堂中文在线免费观看 | 中国精学生妹品射精久久 | 久久久婷 | 人人澡人人澡人人看添av | 国内揄拍国产精品人妻门事件 | 普通话对白国产精品一级毛片 | 自拍偷拍第一页 | 精品久久精品久久 | 免费高清特级毛片 | 欧美黑寡妇香蕉视频 | 免费的一级毛片 | 两个人看的www中文在线观看 | 成人夜色视频网站在线观看 | 久久国产网站 | 色婷婷在线播放 | 特级黄视频 | 欧美a级网站 | 日本久久中文字幕精品 | 国产精品久久久久久久久鸭 | 国产一区二区免费在线观看 | 久久久久久亚洲精品无码 | 国产麻传媒精品国产av | 久久av无码精品人妻出轨 | 国产艳福片内射视频播放 | 国产福利视频深夜福利 | 91成人小视频 | 国产精品久久午夜夜伦鲁鲁 | 一进一出一爽又粗又大 | 瑜伽裤国产一区二区三区 | 国产成人综合亚洲动漫在线 | 国产精品视频专区 | 美国的毛片免费的 | 日日日日做夜夜夜夜做无码 | 爱情岛论坛首页永久入口 |