spring boot 使用JPA @CreatedBy @LastModifiedBy 自动保存操作人

spring boot 使用JPA @CreatedBy @LastModifiedBy 自动保存操作人

在实际开发中,经常需要为数据保存创建人、创建时间、修改人、修改时间这样的数据。使用JPA能轻松搞定这个问题,为数据自动加上这些信息。因为时间比较简单,只要加上@CreatedDate 和 @LastModifiedDate 就行了,主要记录下@CreatedBy @LastModifiedBy这两个注解。

添加注解

在实体类对应的属性上面添加注解,如:
示例代码:

@EntityListeners(AuditingEntityListener.class)
@Data
public class BaseEntity {

    @Id
    @Column(length = 36, columnDefinition = "varchar(36) COMMENT '主键'")
    @GeneratedValue(generator="idGenerator")
    @GenericGenerator(name="idGenerator", strategy = "org.eking.labor.core.utils.SnowflakeId")
    private String uuid;

    @CreatedDate
    @Column(updatable = false, columnDefinition = "datetime COMMENT '创建时间'")
    private Date createTime;

    @LastModifiedDate
    @Column(columnDefinition = "datetime COMMENT '更新时间'")
    @JsonIgnore
    private Date updateTime;

    @Column(columnDefinition = "varchar(36) COMMENT '创建用户ID'")
    @CreatedBy
    @JsonIgnore
    private String createUserUuid;

    @Column(columnDefinition = "varchar(36) COMMENT '最后修改用户ID'")
    @LastModifiedBy
    @JsonIgnore
    private String lastModifyUserUuid;

    @Column(columnDefinition = "varchar(500) COMMENT '创建部门层级代码'")
    @JsonIgnore
    private String createDeptLevelCode;
}

实现AuditorAware类

需要实现org.springframework.data.domain.AuditorAware这个类,根据你需要返回的类型修改这个T,比如我需要返回的是字符串,就是String。需要注意的是,类需要加上@Component以便spring扫描到,否则不起作用。
示例代码:

@Component
@Slf4j
public class SpringSecurityAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        String userId = SecurityUtils.getCurrentUserId();
        if (userId != null){
            return Optional.of(userId);
        } else {
            return Optional.empty();
        }
    }
}

其中获取userId的方法是从spring security获取登录用户,这块就不赘述。

springboot 启动类加上注解@EnableJpaAuditing

加上注解后,会自动扫描到这个实现了AuditorAware的bean

@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

如果有多个实现,则会报错找到两个实现类

No qualifying bean of type ‘org.springframework.data.domain.AuditorAware<?>’ available: expected single matching bean but found 2: springSecurityAuditorAware,springSecurityAuditorAwareTest

这时,只需要在EnableJpaAuditing注解后增加参数说明需要使用哪个就可以

@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

至此,在添加和修改数据库数据的时候,会自动保存当前登录用户的ID到数据库中。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值