Spring Data JPA如何实现审计功能
实现该功能,主要涉及到下列注解:
@EnableJpaAuditing注解:启用JPA审计功能开关。
@CreatedBy注解:创建人,当实体被insert的时候,会设置值。
@LastModifiedBy注解:最后一次修改者,当实体每次被update的时候,会设置值。
@CreatedDate注解:创建日期,当实体被insert的时候,会设置值。
@LastModifiedDate注解:最后一次修改日期,当实体每次被update的时候,会设置值。
如何使用
一、引入依赖;
org.springframework.boot spring-boot-starter-data-jpa
二、实现AuditorAware接口,来自定义获取用户的信息;在实际项目中需要从用户权限模块中获取到当前登录用户的实际信息;
package com.xxkfz.simplememory.config; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.AuditorAware; import java.util.Optional; /** * @version 1.0.0 * @ClassName SpringSecurityAuditorAware.java * @Description 通过实现AuditorAware接口自定义获取用户信息 */ @Configuration public class SpringSecurityAuditorAware implements AuditorAware { @Override public Optional getCurrentAuditor() { return Optional.of("xxkfz"); } }
三、 创建实体类,并标记审计属性;
package com.xxkfz.simplememory.entity;
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 javax.persistence.*;
import java.util.Date;
/**
* @ClassName SysUser.java
* @Description TODO
*/
@Data
@EntityListeners({AuditingEntityListener.class})
@Entity
@Table(name = "t_user")
public class SysUser {
@Id
@Column(name = "id")
private String id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@CreatedBy
@Column(name = "created_by")
private String createdBy;
@LastModifiedBy
@Column(name = "last_modified_by")
private String lastModifiedBy;
@CreatedDate
@Column(name = "created_date")
private Date createdDate;
@LastModifiedDate
@Column(name = "last_modified_date")
private Date lastModifiedDate;
@Column(name = "real_name")
private String realName;
}四、创建JPA Repository接口实现,用于对数据访问;
package com.xxkfz.simplememory.repository; import com.xxkfz.simplememory.entity.SysUser; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * @ClassName UserRepository.java * @Description JPA Repository接口实现,用于对数据库的访问 */ @Repository public interface UserRepository extends JpaRepository{ }
五、在启动类上添加注解@EnableJpaAuditing
package com.xxkfz.simplememory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing
@SpringBootApplication
public class SimpleMemoryApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleMemoryApplication.class, args);
}
}六、编写测试类,进行测试;
package com.xxkfz.simplememory.controller.system;
import cn.hutool.core.lang.UUID;
import com.xxkfz.simplememory.entity.SysUser;
import com.xxkfz.simplememory.mapper.SysOrderMapper;
import com.xxkfz.simplememory.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @ClassName SysUserController.java
* @Description TODO
*/
@RestController
@RequestMapping("/sys_user")
@Slf4j
public class SysUserController {
@Autowired
UserRepository userRepository;
@GetMapping("save")
public void save() {
SysUser user = new SysUser();
user.setId(UUID.fastUUID().toString());
user.setUsername("公众号【SimpleMemory】");
SysUser sysUser = userRepository.save(user);
log.info("sysUser === {}", sysUser);
}
@GetMapping("update")
public void update() {
SysUser sysUser = userRepository.getById("1");
sysUser.setUsername("admin");
SysUser updateSysUser = userRepository.save(sysUser);
log.info("updateSysUser === {}", updateSysUser);
}
}