介绍
在实际业务中的表里经常会加入 创建时间 修改时间 创建者 修改者 这四个字段。而spring data jpa 的审计主要是做一些自动化填充参数使用的。因此为了简化开发, 我们可以将其交给jpa来自动填充。
使用方法
基于springboot的使用是通过注解的方式来实现。 先建一个基础类,继承这个抽象类的entity对象,在执行jpa中的save系列方法的时候 ,都会自动的将上面四个属性填充。save系列方法填充规则是,保存数据时发现没有则新增,同时新增加创建时间 修改时间 创建者 修改者,如果存在则修改,同时更新修改时间 修改者。
第一步
在启动类上添加@EnableJpaAuditing注解,启用jpa的审核
@EnableEncryptableProperties
@SpringBootApplication
@EnableJpaAuditing
@EnableAsync
public class RiskApplication {
public static void main(String[] args) {
SpringApplication.run(RiskApplication.class, args);
}
}
第二步
在基础类上添加jpa实体侦听器@EntityListeners(AuditingEntityListener.class),并且在具体属性上添加@CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedBy注解。
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public class BaseEntity implements Serializable {
/**
* 主键
*/
@Id
@GeneratedValue(generator = "system-uuid")
@NotNull(message = "ID不能为空", groups = {ValidationGroup.update.class, ValidationGroup.delete.class})
private String id;
/**
* 创建人
*/
@CreatedBy
private String createUser;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@CreatedDate
private Date createTime;
/**
* 修改人
*/
@LastModifiedBy
private String updateUser;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@LastModifiedDate
private Date updateTime;
}
第三步
到这里,修改时间和创建时间很好理解,就是当时时间,但是创建者和修改者具有不确定性,就需要通过实现AuditorAware接口让程序知道当前审核程序的用户,实现逻辑根据项目实际情况编写
@Configuration
public class UserIDAuditorBean implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
/**
* 从jwt工具里面获取操作的当前用户信息
*/
String username = JWTUtil.getUsername();
if(null!=username){
return Optional.of(username);
}
return Optional.empty();
}
}
这样就能实现jpa自动填写创建时间、修改时间、创建者、修改者了。