Auditing翻译过来是审计和审核。Spring的优秀之处在于帮我们想到了很多我们平时烦琐事情的解决方案,我们在实际的业务系统 中,针对一张表的操作大部分是需要记录谁什么时间创建的,谁什么时间修改的,并且能让我们方便地记录操作日志。Spring Data JPA为我们提供了审计功能的架构实现,提供了4个注解专门解决这件事:
1.@CreatedBy:创建人。2.@CreatedDate:创建时间。3.@LastModifiedBy:最后修改人。4.@LastModifiedDate:最后修改时间。
增加公共虚拟类
一般情况下,创建人、创建时间、最后修改人、最后修改时间四个字段都是统一的。所以,我们可以将其提取到公共的类中,然后所有的实体类继承这个虚拟类。
@EntityListeners(AuditingEntityListener.class)@MappedSuperclasspublic abstract class AbstractAuditable {@CreatedByprivate String createBy;@CreatedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private java.sql.Timestamp createTime;@LastModifiedByprivate String updateBy;@LastModifiedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private java.sql.Timestamp updateTime;}
[tag type="default"]必须添加`@MappedSuperclass`注解[/tag]# 修改实体,继承AbstractAuditable```java@Entity@Table(name = "sys_user")@Data@Slf4jpublic class SysUser extends AbstractAuditable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long userId;@JoinColumn(name = "dept_id", referencedColumnName = "dept_id")@ManyToOne(cascade = CascadeType.ALL)private SysDept sysDept;private String userName;private String nickName;private String userType;private String email;@Column(name = "phonenumber")private String phoneNumber;private String sex;private String avatar;@JsonIgnoreprivate String password;@Enumerated(EnumType.STRING)private Status status;private String delFlag;private String loginIp;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private java.sql.Timestamp loginDate;private String remark;private Long recycleCompanyId;private Long medicalInstitutionId;private Long ethnicity;@ManyToMany(fetch = FetchType.EAGER)@JoinTable(name = "sys_user_role",joinColumns = {@JoinColumn(name = "user_id")},inverseJoinColumns = {@JoinColumn(name = "role_id")})private Set<SysRole> sysRoles;}
实现AbstractAuditable接口
实现AbstractAuditable
接口,提供创建者、最后修改者信息,这里我们随便模拟了以下常量。
public class MyAuditorAware implements AuditorAware<String> {/*** Returns the current auditor of the application.** @return the current auditor.*/@Overridepublic Optional<String> getCurrentAuditor() {return Optional.of("测试用户");}}
开启Auditing功能
通过@EnableJpaAuditing注解开启JPA的Auditing功能,并且告诉应用AuditorAware的实现类是谁。
@SpringBootApplication@EnableJpaRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)@EnableJpaAuditingpublic class Example1Application {public static void main(String[] args) {SpringApplication.run(Example1Application.class, args);}@Beanpublic AuditorAware<String> auditorAware(){return new MyAuditorAware();}}
测试
@GetMapping("/save")public Long save(){SysUser sysUser = new SysUser();sysUser.setNickName("测试123321");sysUser.setUserName("测试123321");sysUser.setSex("0");sysUserRepository.save(sysUser);return sysUser.getUserId();}


文章转载自香草物语博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




