spring jpa 公共字段设计

16 篇文章 0 订阅

数据库公共字段

1、多租户 tenantId
2、创建者名字 createName
3、创建者时间 createTime
4、更新者名字 updateName
5、更新者时间 updateTime

基础model类

/**
 * 基础Model
 */
@Data
@MappedSuperclass
public class BaseModel implements Serializable{
	@Id
	@GeneratedValue(strategy= GenerationType.AUTO, generator="native")
	@GenericGenerator(name="native", strategy="native")
	protected Long id;

	private String tenantId;
	
	@CreatedBy
	@Column(updatable = false)
	private String createName;
	/**
	 * 创建时间
	 */
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	@CreatedDate
	@Column(updatable = false)
	private LocalDateTime;
	
	@CreatedBy
	@LastModifiedBy
	private String updateName;
	/**
	 * 修改时间
	 */
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	@LastModifiedDate
	private LocalDateTimemodifyTime;
}

子类应用

@Entity
@Table(name = "users")
public class UserEntity extends BaseEntity {
    private String username;
	......
}

AuditingEntityListener

在Spring Data JPA中,AuditingEntityListener是一个用于自动审计(auditing)的实体监听器(EntityListener)。它可以帮助开发者自动跟踪实体的创建、更新和删除等操作,而无需在每个实体类中显式地编写这些逻辑。
要使用AuditingEntityListener,需要确保以下几点:

  1. 添加依赖:确保项目中包含了Spring Data JPA和Spring Boot的starter依赖(如果使用的是Spring Boot)。
  2. 开启审计功能:在Spring Boot应用中,可以使用@EnableJpaAuditing注解来开启审计功能。
  3. 配置审计属性:可以通过auditorAware和dateTimeProvider来配置审计的属性。例如,可能想要记录是哪个用户修改了实体,或者实体的最后修改时间。
  4. 在实体类上使用注解:使用@EntityListeners(AuditingEntityListener.class)注解在实体类上启用审计监听器。此外,还可以使用@CreatedBy、@CreatedDate、@LastModifiedBy和@LastModifiedDate等注解来指定哪些字段应该用于存储审计信息。
    下面是一个简单的例子:

1. 实体类

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 javax.persistence.*;  
import java.time.LocalDateTime;  
  
@Entity  
@EntityListeners(AuditingEntityListener.class)  
public class MyEntity {  
  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  
  
    @CreatedBy  
    private String createdBy;  
  
    @CreatedDate  
    private LocalDateTime createdDate;  
  
    @LastModifiedBy  
    private String lastModifiedBy;  
  
    @LastModifiedDate  
    private LocalDateTime lastModifiedDate;  
  
    // getters and setters...  
}

2. 配置类

import org.springframework.context.annotation.Configuration;  
import org.springframework.data.domain.AuditorAware;  
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;  
  
@Configuration  
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")  
public class AuditConfig {  
  
    // 可以实现一个AuditorAware的Bean来提供当前的用户信息  
    // 例如,在Web应用中,可以从SecurityContextHolder中获取当前的用户名  
  
    @Bean  
    public AuditorAware<String> auditorProvider() {  
        return () -> Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication())  
                .map(Authentication::getName);  
    }  
}

AuditorAware

AuditorAware接口用于在审计过程中确定当前用户(即“审计者”或“修改者”)。当使用@CreatedBy和@LastModifiedBy注解时,Spring Data JPA会查找一个实现了AuditorAware接口的bean来填充这些字段的值。

下面是如何实现和配置AuditorAware的一个示例:

  1. 实现AuditorAware接口
    首先,需要实现AuditorAware接口。在这个实现中,需要提供一个方法返回当前审计者的信息。在Web应用中,这通常意味着从Spring Security的SecurityContextHolder中获取当前认证的用户。
import org.springframework.security.core.Authentication;  
import org.springframework.security.core.context.SecurityContextHolder;  
import org.springframework.stereotype.Component;  
  
import java.util.Optional;  
  
@Component  
public class SpringSecurityAuditorAware implements AuditorAware<String> {  
  
    @Override  
    public Optional<String> getCurrentAuditor() {  
        // 获取当前认证的用户(如果有的话)  
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();  
  
        if (authentication == null || !authentication.isAuthenticated() || !(authentication.getPrincipal() instanceof String)) {  
            return Optional.empty();  
        }  
  
        // 假设我们存储的是用户名作为String类型  
        return Optional.of((String) authentication.getPrincipal());  
    }  
}
  1. 配置AuditorAware
    在Spring Boot应用中,可以使用@EnableJpaAuditing注解来开启JPA审计功能,并通过auditorAwareRef属性指定AuditorAware实现。
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;  
  
@Configuration  
@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")  
public class AuditConfig {  
  
    @Bean  
    public SpringSecurityAuditorAware springSecurityAuditorAware() {  
        return new SpringSecurityAuditorAware();  
    }  
}

在这个配置中,auditorAwareRef属性的值应该是AuditorAware bean的名称(默认是bean的类型名称的首字母小写,但可以通过@Bean注解的name属性来指定一个不同的名称)。
3. 在实体类中使用审计注解
现在,可以在实体类中使用@CreatedBy和@LastModifiedBy注解了。当实体被保存或更新时,Spring Data JPA会自动填充这些字段。

import org.springframework.data.annotation.CreatedBy;  
import org.springframework.data.annotation.LastModifiedBy;  
  
import javax.persistence.Entity;  
  
@Entity  
public class MyEntity {  
  
    // ... 其他字段 ...  
  
    @CreatedBy  
    private String createdBy;  
  
    @LastModifiedBy  
    private String lastModifiedBy;  
  
    // ... getters and setters ...  
}

请注意,需要确保应用已经配置了Spring Security或其他安全框架,以便能够访问到当前的用户信息。如果没有使用任何安全框架,或者想使用不同的方式来确定审计者,可以根据需要调整AuditorAware实现中的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值