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

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

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

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

实现方式

在实体类上添加注解;uUI28资讯网——每日最新资讯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就可以自动使用该配置。uUI28资讯网——每日最新资讯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启用。uUI28资讯网——每日最新资讯28at.com

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

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

实现原理

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

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

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

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

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

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

标签:
  • 热门焦点
Top
Baidu
map