当前位置:首页 > 科技  > 软件

基于JPA如何处理数据表公共字段?

来源: 责编: 时间:2024-06-20 08:55:26 215观看
导读在软件开发中,我们经常需要跟踪实体的历史记录,例如创建时间、修改时间等。Spring Data JPA 提供了一种名为 Auditing 的功能,可以自动处理这些操作。本文将介绍如何在 Spring Boot 项目中使用 Spring JPA Auditing。实

在软件开发中,我们经常需要跟踪实体的历史记录,例如创建时间、修改时间等。Spring Data JPA 提供了一种名为 Auditing 的功能,可以自动处理这些操作。本文将介绍如何在 Spring Boot 项目中使用 Spring JPA Auditing。30n28资讯网——每日最新资讯28at.com

实现方式

在实体类上添加注解;30n28资讯网——每日最新资讯28at.com

  1. 定义通用实体,比如Domain类,我们会将通用字段在这里定义
@MappedSuperclass@Datapublic class Domain implements Serializable {    @CreatedBy    @Column(name = "creator", length = 56)    private String creator;    @CreatedDate    @Column(name = "create_time", length = 12)    private Date createTime;    @LastModifiedBy    @Column(name = "modifier", length = 56)    private String modifier;    @LastModifiedDate    @Column(name = "modified_time", length = 12)    private Date modifiedTime;}
  1. 添加Auditing相关注解;
// ...@EntityListeners(AuditingEntityListener.class)public class Domain implements Serializable {    // ...}
  1. 添加自动填充属性实现,主要通过实现AuditorAware接口,并将实现注入到spring容器;
public class DomainAuditorAware implements AuditorAware<String> {    @Override    public Optional<String> getCurrentAuditor() {        return Optional.of("我是操作人");    }}
  1. 定义spring自动配置;
@Configurationpublic class JpaAuditingConfiguration {    @Bean    public DomainAuditorAware domainAuditorAware(){        return new DomainAuditorAware();    }}

在resource目录添加自动注入配置META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,这样通过引入jar就可以自动使用该配置。30n28资讯网——每日最新资讯28at.com

cn.cycad.jpa.auditing.config.JpaAuditingConfiguration

应用示例

  1. 比如现在有一个User实体,我们通过继承基类;
@Entity@Table(name = "t_user")@Datapublic class User extends Domain {    @Id    private String id;    private String caption;}
  1. 定义用户对应的Repository;
public interface UserRepository extends JpaRepository<User,String> {    }
  1. 用户的创建与修改基于UserRepository来实现;
@RestController@RequestMapping("/user")public class UserController {    @Resource    private UserRepository userRepository;        @PostMapping    public User saveUser(@RequestBody User user){        return userRepository.save(user);    }}
  1. 服务;
@EnableJpaAuditing@EntityScan({"cn.cycad.jpa.auditing.sample.entity"})@EnableJpaRepositories(basePackages="cn.cycad.jpa.auditing.sample.repository")@SpringBootApplicationpublic class SampleApplication{    public static void main(String[] args) {        SpringApplication.run(SampleApplication.class, args);    }}

通过注解@EnableJpaAuditing启用。30n28资讯网——每日最新资讯28at.com

  1. 编写测试用例;
### 新增用户POST http://localhost:8080/userContent-Type: application/json{  "id": "1",  "caption": "tom"}

这样每次调用用户新增请求时,默认会将DomainAuditorAware的返回值填充到@CreatedBy与@LastModifiedBy修饰的字段上去。30n28资讯网——每日最新资讯28at.com

实现原理

可以看到,实现该效果狐妖有以下几个关键点:30n28资讯网——每日最新资讯28at.com

  1. 实体需要添加@EntityListeners(AuditingEntityListener.class),并且需要再对应字段上标识出需要注入的操作人、操作时间等。
  2. 需要编写自己的实现AuditorAware<String>,这里只用关注创建人,时间没必要处理,当然也可以通过实现接口DateTimeProvider来扩展。
  3. 需要基于JpaRepository接口实现用户的新增或修改。
  4. 需要@EnableJpaAuditing开启。

本文链接:http://www.28at.com/showinfo-26-95001-0.html基于JPA如何处理数据表公共字段?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Runway 王者归来发布 Gen-3 Google 快手万兴科技等纷纷聚焦 AI 视频生成赛道

下一篇: IDC报告:AR/VR头显出货量骤降67.4%,但MR/ER头显呈现新机遇

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top