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

}

相关文章
|
2月前
|
存储 Java 数据库
|
2月前
|
存储 搜索推荐 Java
|
2月前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
79 0
|
4天前
|
XML 存储 缓存
Spring缓存是如何实现的?如何扩展使其支持过期删除功能?
总之,Spring的缓存抽象提供了一种方便的方式来实现缓存功能,并且可以与各种缓存提供商集成以支持不同的过期策略。您可以根据项目的具体需求选择适合的方式来配置和扩展Spring缓存功能。
9 0
|
4天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
9天前
|
XML 缓存 Java
Spring核心功能IOC详解
Spring核心功能IOC详解
20 0
Spring核心功能IOC详解
|
10天前
|
前端开发 Java Spring
Spring Framework五大功能模块
Spring Framework五大功能模块
|
27天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
17 0
|
2月前
|
缓存 NoSQL Java
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(二)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
34 0
|
2月前
|
移动开发 Java 测试技术
Spring MVC+Spring+Mybatis实现支付宝支付功能(附完整代码)
Spring MVC+Spring+Mybatis实现支付宝支付功能(附完整代码)
24 1