如何使用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");
}
AI 代码解读

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

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;
AI 代码解读

}
四、创建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);
}
AI 代码解读

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

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);
}
AI 代码解读

}

目录
打赏
0
0
0
0
17
分享
相关文章
|
5月前
|
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
95 4
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
87 0
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
320 1
|
2月前
|
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
88 21
|
5月前
|
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
96 0
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
191 62
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
82 14
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
77 3

热门文章

最新文章