万网主机管理-SQL语句中公共字段的自动填充方法

这篇文章主要给咱们介绍了关于万网主机管理SQL语句中公共字段的主动填充办法,文中经过示例代码介绍的十分详细,对咱们的学习或许作业具有必定的参阅学习价值,需求的朋友们下面跟着小编来一同学习学习吧

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把公共审计字段放进去并声明对应的填充战略:

public abstract class BaseEntity> extends Model{

@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改为上面的BaseEntity:

@Data
@EqualsAndHashCode(callSuper = false)
public class UserInfo extends BaseEntity{
@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语句中公共字段的主动填充办法的文章就介绍到这了,

共有 0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注