Spring Data JPA实现审计功能过程详解
Bug解决者 人气:0在项目中每条数据在创建修改的时候,我们都需要记录创建人,创建时间,修改人,修改时间等信息。如果每次新增的时候都去手动set,代码冗余且显得很不友好。
下面给大家分享如何使用Spring Data JPA完成审计功能:
实现该功能,主要涉及到下列注解:
- @EnableJpaAuditing注解:启用JPA审计功能开关。
- @CreatedBy注解:创建人,当实体被insert的时候,会设置值。
- @LastModifiedBy注解:最后一次修改者,当实体每次被update的时候,会设置值。
- @CreatedDate注解:创建日期,当实体被insert的时候,会设置值。
- @LastModifiedDate注解:最后一次修改日期,当实体每次被update的时候,会设置值。
如何使用
一、引入依赖;
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
二、实现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<T>接口自定义获取用户信息 */ @Configuration public class SpringSecurityAuditorAware implements AuditorAware<String> { @Override public Optional<String> 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<SysUser, String> { }
五、在启动类上添加注解@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); } }
加载全部内容