如何使用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);
}

}

相关文章
存储 JSON Java
163 0
|
23天前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
114 0
|
2月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
363 2
|
3月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
155 15
|
4月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
4月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
180 32
|
5月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
336 4
|
5月前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
556 4
|
5月前
|
SQL Java 编译器
深入理解 Spring Data JPA 的导入与使用:以 UserRepository为例
本文深入解析了 Spring Data JPA 中 `UserRepository` 的导入与使用。通过示例代码,详细说明了为何需要导入 `User` 实体类、`JpaRepository` 接口及 `@Repository` 注解。这些导入语句分别用于定义操作实体、提供数据库交互方法和标识数据访问组件。文章还探讨了未导入时的编译问题,并展示了实际应用场景,如用户保存、查询与删除操作。合理使用导入语句,可让代码更简洁高效,充分发挥 Spring Data JPA 的优势。
342 0
|
8月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
191 21