好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Spring Data JPA实现审计功能过程详解

在项目中每条数据在创建修改的时候,我们都需要记录创建人,创建时间,修改人,修改时间等信息。如果每次新增的时候都去手动set,代码冗余且显得很不友好。

下面给大家分享如何使用Spring Data JPA完成审计功能:

实现该功能,主要涉及到下列注解:

@EnableJpaAuditing注解:启用JPA审计功能开关。 @CreatedBy注解:创建人,当实体被insert的时候,会设置值。 @LastModifiedBy注解:最后一次修改者,当实体每次被update的时候,会设置值。 @CreatedDate注解:创建日期,当实体被insert的时候,会设置值。 @LastModifiedDate注解:最后一次修改日期,当实体每次被update的时候,会设置值。

如何使用

一、引入依赖;

?

1

2

3

4

< dependency >

      < groupId >org.springframework.boot</ groupId >

      < artifactId >spring-boot-starter-data-jpa</ artifactId >

</ dependency >

二、实现AuditorAware接口,来自定义获取用户的信息;在实际项目中需要从用户权限模块中获取到当前登录用户的实际信息;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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" );

     }

}

三、 创建实体类,并标记审计属性;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

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接口实现,用于对数据访问;

?

1

2

3

4

5

6

7

8

9

10

11

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

?

1

2

3

4

5

6

7

8

9

10

11

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);

     }

}

六、编写测试类,进行测试;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

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);

     }

}

到此这篇关于Spring Data JPA实现审计功能过程详解的文章就介绍到这了,更多相关Spring Data JPA实现审计内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_43759352/article/details/123022671

查看更多关于Spring Data JPA实现审计功能过程详解的详细内容...

  阅读:23次