使用 JPA 和 Hibernate 定义一个基础实体(创建时间,创建人,更新时间,更新人)
首先确定使用的是 JPA + Hibernate. 导入对应依赖(省略)。
使用的场景,在数据库中,每个表都需要的字段,(创建时间,创建人,更新时间,更新人) ,减少我们频繁重复的工作。
1、创建对应的基础类
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 基础实体
**/
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class AbstractEntity implements Serializable {
@CreatedBy
@Column(name = "created_by", updatable = false)
private String createdBy;
@CreatedDate
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@LastModifiedBy
@Column(name = "updated_by")
private String updatedBy;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}
- 其中@MappedSuperclass :表示当前的类是一个基础的父类,不会生成对应的实体(@Entity 是需要对应的实体的)
- @EntityListeners(AuditingEntityListener.class) 是实体类的一个监听器,使用这个后,才会监听到实体类的变化。进行时间戳和对应的创建人更新人的添加。
- @CreatedBy、@CreatedDate、 @LastModifiedBy、@LastModifiedDate 注解的直译就是对应的意思,很好理解,不做赘述。
完成对应的上述操作后,并不会起作用,接下来,完成第二步
2、使用 @EnableJpaAuditing 在Spring应用程序的配置类中启用JPA审计功能,添加此功能后@CreatedDate和@LastModifiedDate注解就会生效
@SpringBootApplication
@EnableJpaAuditing
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
但是我们使用的@CreatedBy,@LastModifiedBy还没有起作用,还需要做一个配置类
@Configuration
public class UserAuditorAware implements AuditorAware {
@Override
public Optional<String> getCurrentAuditor() {
final String userId = "当前用户名称,可以从上下文获取";
if (StringUtils.isNotBlank(userId)) {
return Optional.ofNullable(userId);
}
return Optional.empty();
}
}
完成上述的操作之后,我们的基础实体类就配置完成了,其他的实体类(包含@Entity的类)就可以继承实现自动添加更新对应的字段了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示