源码地址:https://gitee.com/yk001/base.git
1,简单介绍
很多管理系统中创建人、创建时间、最后更新人,最后更新时间都是建表的必选字段。
auditing特性在实体类的创建人、创建时间、最后更新人,最后更新时间属性上,使用以下注解@CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedDate。
这些注解会在调用数据库前,对修饰的字段进行填充,无需再在业务代码中对这些属性进行手动赋值。
@CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedDate insert时会对字段进行填充
@LastModifiedBy、@LastModifiedDate update时会对字段进行填充
2,Entity举例
在对应的字段上分别加上@CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedDate
在实体类上加上@EntityListeners(AuditingEntityListener.class)
@Data
@Table(name="base_entity")
@Entity
@TypeDef(name = "remark", typeClass = JsonBinaryType.class)
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@Id
@SequenceGenerator(name="baseEntityIdSeq",sequenceName="base_entity_id_seq",allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="baseEntityIdSeq")
private Long id;
private String name;
@Type(type = "remark")
private JSONObject remark;
@CreatedBy
@Column(updatable = false)
private String createdUser;
@CreatedDate
@Column(updatable = false)
private Timestamp createdTime;
@LastModifiedBy
private String updatedUser;
@LastModifiedDate
private Timestamp updatedTime;
}
3,配置AuditorAware
@Configuration
public class JpaAuditorConfig implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
// 可以根据SecurityContextHolder获取当前登录用户的信息
return Optional.of("root");
}
}
4,@EnableJpaAuditing开启JPA审计
@SpringBootApplication
@EnableJpaAuditing
public class BaseApplication {
public static void main(String[] args) {
SpringApplication.run(BaseApplication.class, args);
}
}
5,验证
curl -X POST "http://localhost:9001/baseentity" -H "accept: */*" -H "Content-Type: application/json" -d "{ \"name\": \"string\", \"remark\": { \"additionalProp1\": {}, \"additionalProp2\": {}, \"additionalProp3\": {} }}"
curl -X PUT "http://localhost:9001/baseentity/2" -H "accept: */*" -H "Content-Type: application/json" -d "{ \"name\": \"string1\"}"