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

  介绍

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

<强> 1。前言

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

<强> 2。通用方式

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

<强> 2.1开发Mybatis审计插件

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

<强> 2.2 Mybatis +自动填充

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

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

public  abstract  class  BaseEntity, {      ,@TableField (fill =, FieldFill.INSERT)   ,private  String 创造者;   ,@TableField (fill =, FieldFill.INSERT)   ,private  LocalDateTime  addTime;   ,@TableField (fill =, FieldFill.UPDATE)   ,private  String 更新;   ,@TableField (fill =, FieldFill.UPDATE)   ,private  LocalDateTime  updateTime;   }

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

@ data   @EqualsAndHashCode (callSuper =,假)   public  class  UserInfo  extends  BaseEntity< UserInfo>, {=,@TableId (value “user_id",, type =, IdType.ASSIGN_ID)   ,private  String 标识;   ,private  String 用户名;      ,@Override   ,protected  Serializable  pkVal (), {   return 才能;this.userId;   ,}   }

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

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

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