SQL语句中公共字段的⾃动填充⽅法
1. 前⾔
我们在设计数据库的时候⼀定会带上新增、更新的时间、操作者等审计信息。之所以带这些信息是因为假如有⼀天公司的数据库被⼈为删了,尽管可能有数据库备份可以恢复数据。但是我们仍然需要追踪到这个事是谁⼲的,在什么时间⼲的,具体⼲了哪些事等等,⽅便定责和修补。但是我们变更每条数据都要去显式变更这些信息就⼗分繁琐,我们希望⽆感知的来处理这些信息。
2. 通⽤⽅式
那么有什么好的解决思路呢?在Spring Data框架中提供@CreatedBy和@LastModifiedBy来捕捉谁创建或修改的实体以及
@CreatedDate和@LastModifiedDate来捕捉合适创建或修改了实体。如果你使⽤相关的框架就可以使⽤这些特性。那么其实我们知道国内Spring Data JDBC、Spring Data JPA并不是主流,主流的是Mybatis。那么我们有哪些选择?
2.1 开发Mybatis审计插件
insert语句字段顺序如果你使⽤了原⽣的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 = CurrentUserId();
this.strictInsertFill(metaObject,"creator",String.class, userId);
this.strictInsertFill(metaObject,"createTime", LocalDateTime.w());
}
@Override
public void updateFill(MetaObject metaObject) {
// 声明⾃动填充字段的逻辑。
String userId = CurrentUserId();
this.strictUpdateFill(metaObject,"updater",String.class,userId);
this.strictUpdateFill(metaObject,"updateTime", LocalDateTime.w());
}
}
然后我们扩展⼀下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;
}
}
这样我们就不⽤再关⼼这⼏个公共字段了,当然你可以根据需要添加更多你需要填充的字段。
3. 总结
今天我们SQL审计中的⼀些公共字段的⾃动填充的常⽤⽅案进⾏了⼀些介绍,特别对Mybatis Plus提供的功能进⾏了介绍相信能够帮助你简化⼀些样板代码的编写。但是SQL审计并不仅仅这么简单,根据你的业务的不同会有不同的设计。如果设计的更加精细化的话,会通过镜像或探针的⽅式采集所有数据库的访问流量,并基于SQL语法、语义的解析技术,记录下数据库的所有访问和操作⾏为。有空可以从⽹上获取相关的资料进⾏了解。
到此这篇关于SQL语句中公共字段的⾃动填充⽅法的⽂章就介绍到这了,更多相关SQL语句公共字段⾃动填充内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论