SpringData JPA审计字段的使用

SpringData JPA审计字段的使用

往期文章

  1. SpringBoot整合SpringData JPA
  2. JPA的一对一、一对多、多对多查询
  3. JPA查询方式:方法命名规则、@Query查询、结果集类型转化器

审计字段

系统的数据表中一般会记录固定的字段以记录数据的元数据,例如:ID、创建人、创建时间、修改人、修改时间、逻辑删除、版本号等

Spring Data提供了对应的注解:@Id@CreatedBy(创建人)@CreatedDate(创建时间)@LastModifiedBy(修改人)@LastModifiedDate(修改时间)@Version(版本号)

需要添加的依赖

<!--Spring aspect Auditor审计功能需要-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aspects</artifactId>
</dependency>

步骤

1. 启动类添加注解:@EnableJpaAuditing

2. 创建一个组件,实现AuditorAware接口

为创建人、修改人字段赋值(如果是做了登录模块的可以使用Session)

@Component
public class EvadAuditorAware implements AuditorAware<String> {

	@Override
	public Optional<String> getCurrentAuditor() {
		// 该值将在执行insert或update语句时赋值给创建人和修改人字段
		// 如果有权限模块就可以通过权限上下文对象获取用户信息,再赋值了
		return Optional.of("Evad");
	}
}

3. 创建一个审计字段的抽象类,其他数据表映射类可以继承它

/**
 * @author Evad.Wu
 * @Description 基础审计属性
 * @date 2022-07-10
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@ApiModel(value = "基础审计属性")
public abstract class BasePo implements Serializable {
	@Serial
	private static final long serialVersionUID = -8496736827518774172L;

	@Id
	@Column(name = "ID", columnDefinition = "BIGINT(20) COMMENT '主键'")
	private Long id;
	@CreatedBy
	@Column(name = "CREATOR", updatable = false, columnDefinition = "VARCHAR(64) COMMENT '创建人'")
	private String creator;
	@CreatedDate
	@Column(name = "CREATE_TIME", columnDefinition = "DATETIME COMMENT '创建时间'", updatable = false)
	private Date createTime;
	@LastModifiedBy
	@Column(name = "MODIFIER", updatable = false, columnDefinition = "VARCHAR(64) COMMENT '修改人'")
	private String modifier;
	@LastModifiedDate
	@Column(name = "MODIFY_TIME", columnDefinition = "DATETIME COMMENT '修改时间'")
	private Date modifyTime;
	@Column(name = "LOGIC_DEL", columnDefinition = "TINYINT DEFAULT 0 COMMENT '逻辑删除'")
	private Boolean logicDel;
	@Version
	@Column(name = "REC_VER", columnDefinition = "BIGINT(20) DEFAULT 1 COMMENT '版本号'")
	private Long recVer = 1L;
}

4. @EntityListeners

审计监听注解与实现类

@EntityListeners(AuditingEntityListener.class) // 审计功能

源码解释:
JPA实体监听器,用于捕获关于发布(Insert)和更新(update)实体的审计信息。

5. @MappedSuperclass

给父类添加这个注解后,父类中的审计字段就不会被视为独立的表了。

源码解释:
指定一个类,其映射信息应用于从该类继承的实体。映射的超类没有为其定义单独的表。

6. 创建一个数据库映射类,继承审计字段的父类

@Setter
@Getter
@NoArgsConstructor
@Accessors(chain = true)
@TableName(value = "SYS_USER_AGENT")

@Entity
@Table(name = "SYS_USER_AGENT")
@DynamicInsert
@EntityListeners(AuditingEntityListener.class)
public class SysUserAgent extends BasePo {
	@Serial
	private static final long serialVersionUID = -725432336951066705L;

	/**
	 * User-Agent
	 */
	@TableField(value = "USER_AGENT")
	@Column(name = "USER_AGENT", columnDefinition = "varchar(512) NOT NULL COMMENT 'user-agent'")
	private String userAgent;
}

7. 对应的数据库建表语句

CREATE TABLE `SYS_USER_AGENT` (
  `ID` bigint(20) NOT NULL COMMENT '主键',
  `CREATOR` varchar(64) NOT NULL COMMENT '创建人',
  `CREATE_TIME` datetime NOT NULL COMMENT '创建时间',
  `MODIFIER` varchar(64) NOT NULL COMMENT '修改人',
  `MODIFY_TIME` datetime NOT NULL COMMENT '修改时间',
  `LOGIC_DEL` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除',
  `REC_VER` bigint(20) NOT NULL COMMENT '版本号',
  `USER_AGENT` varchar(512) NOT NULL COMMENT 'user-agent',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'Header常用User-Agent信息表';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加把劲骑士RideOn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值