适用场景
需要对数据的创建人、创建时间、最后修改时间、最后修改人进行记录
实现目标
不破坏原有操作习惯,实现插入,修改时自动记录
先决条件
1.spring boot项目
2.使用spring data jpa 持久化管理
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
spring data jpa@auditing
解决方案
1.创建基类
该类包含了记录需要的字段,用于需要做记录的子类继承。
/**
* 审计基类
*/
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseDO {
@CreatedDate
@Column
private Date createdDate;
@CreatedBy
@Column
private String createdBy;
@LastModifiedBy
@Column
private String lastModifiedBy;
@LastModifiedDate
@Column
private Date lastModifiedDate;
}
注释含义:
- @MappedSuperclass |JPA用于继承的映射父类(用于Entity继承,不会在数据库生成表)
- @EntityListeners |Entity 监听器,管理Entitty生命周期
- @Column |JPA字段映射
- @CreatedDate |创建时间
- @CreatedBy |创建人
- @LastModifiedBy |最后修改人
- @LastModifiedDate |最后修改时间
2.审计配置
启用JPAAuditing,配置用户获得方式。
/**
* 审计配置
*/
@Configuration
@EnableJpaAuditing
public class ModeConfig {
@Bean
public AuditorAware<String> auditorProvider() {
return () -> {
try {// Optional.ofNullable(<登录用户名>) ---设置用户获取方式
return Optional.ofNullable(SecurityUtils.getSubject().getPrincipal().toString());
} catch (Exception e) {//保证获取用户异常时程序的正常运行。
return Optional.empty();
}
};
}
}
3.继承基类
需要记录的实体,继承配置好的基类即可
@Entity
class MyDO extends BaseDO {}
网友评论