如何使用Spring Data JPA完成审计功能

简介: 如何使用Spring Data JPA完成审计功能

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

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

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

如何使用

一、引入依赖;


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;

/**

  • @author 公众号: SimpleMemory
  • @version 1.0.0
  • @ClassName SpringSecurityAuditorAware.java
  • @Description 通过实现AuditorAware接口自定义获取用户信息
  • @createTime 2022年02月18日 19:21:00
    */

@Configuration
public class SpringSecurityAuditorAware implements AuditorAware {

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

/**

  • @author 公众号: SimpleMemory
  • @version 1.0.0
  • @ClassName SysUser.java
  • @Description TODO
  • @createTime 2022年02月18日 19:18:00
    */

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

/**

  • @author 公众号: SimpleMemory
  • @version 1.0.0
  • @ClassName UserRepository.java
  • @Description JPA Repository接口实现,用于对数据库的访问
  • @createTime 2022年02月18日 19:24:00
    */
    @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.*;

/**

  • @author 公众号: SimpleMemory
  • @version 1.0.0
  • @ClassName SysUserController.java
  • @Description TODO
  • @createTime 2022年02月18日 19:25:00
    */

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

}

相关文章
|
24天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
37 4
|
26天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
132 1
|
21天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
31 0
|
10天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
90 62
|
8天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
23 2
|
1月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
34 9
|
27天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
38 3
|
28天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第7天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建 Spring Boot 项目并配置 Spring Security。接着,实现后端 API 以提供菜单数据。在前端部分,使用 Ant Design Pro Vue 脚手架创建项目,并配置动态路由和菜单。最后,启动前后端服务,实现高效、美观且功能强大的应用框架。
34 2
|
1月前
|
SQL Java 关系型数据库
Springboot引入jpa来管理数据库
Springboot引入jpa来管理数据库
30 0
Springboot引入jpa来管理数据库
|
1月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
226 11