美文网首页js css html
Spring Data JPA之Auditing

Spring Data JPA之Auditing

作者: AC编程 | 来源:发表于2018-12-10 17:16 被阅读107次

一、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;

    其他字段省略..... 
}
参考文章:

相关文章

网友评论

    本文标题:Spring Data JPA之Auditing

    本文链接:https://www.haomeiwen.com/subject/ktddhqtx.html