一、Auditing 自动填充字段功能
操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。Spring Data JPA提供了自动填充字段的功能,简单配置一下即可
- @CreatedDate
表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值 - @CreatedBy
表示该字段为创建人,在这个实体被insert的时候,会设置值 - @LastModifiedDate、@LastModifiedBy同理。
二、使用
首先申明实体类,需要在类上加上注解@EntityListeners(AuditingEntityListener.class),其次在application启动类中加上注解EnableJpaAuditing,同时在需要的字段上加上@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy等注解。
这个时候,在jpa.save方法被调用的时候,时间字段会自动设置并插入数据库,但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的值。
- Application
@SpringBootApplication
@ServletComponentScan
@EnableJpaAuditing
public class YoPointServerApplication {
public static void main(String[] args) {
SpringApplication.run(YoPointServerApplication.class, args);
}
}
- AuditorAware
@Configuration
public class InjectOpreator implements AuditorAware<String> {
/**
* 给Bean中的 @CreatedBy @LastModifiedBy 注入操作人
* @return
*/
@Override
public Optional<String> getCurrentAuditor() {
SecurityContext ctx = SecurityContextHolder.getContext();
if (ctx == null) {
return null;
}
if (ctx.getAuthentication() == null) {
return null;
}else{
String loginUserName = ctx.getAuthentication().getName();
Optional<String> name = Optional.ofNullable(loginUserName);
return name;
}
}
}
- Entity
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class IdEntity {
@CreatedBy //自动插入操作人
private String createBy;
@CreatedDate //自动插入操作时间
private Timestamp createDate;
@LastModifiedBy //自动插入操作人
private String updateBy;
@LastModifiedDate //有修改时 会自动更新时间
private Timestamp updateDate;
其他字段省略.....
}
网友评论