自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于JPA如何處理數(shù)據(jù)表公共字段?

開發(fā) 前端
實體需要添加@EntityListeners(AuditingEntityListener.class),并且需要再對應(yīng)字段上標(biāo)識出需要注入的操作人、操作時間等。

在軟件開發(fā)中,我們經(jīng)常需要跟蹤實體的歷史記錄,例如創(chuàng)建時間、修改時間等。Spring Data JPA 提供了一種名為 Auditing 的功能,可以自動處理這些操作。本文將介紹如何在 Spring Boot 項目中使用 Spring JPA Auditing。

實現(xiàn)方式

在實體類上添加注解;

  1. 定義通用實體,比如Domain類,我們會將通用字段在這里定義
@MappedSuperclass
@Data
public 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相關(guān)注解;
// ...
@EntityListeners(AuditingEntityListener.class)
public class Domain implements Serializable {
    // ...
}
  1. 添加自動填充屬性實現(xiàn),主要通過實現(xiàn)AuditorAware接口,并將實現(xiàn)注入到spring容器;
public class DomainAuditorAware implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        return Optional.of("我是操作人");
    }
}
  1. 定義spring自動配置;
@Configuration
public class JpaAuditingConfiguration {

    @Bean
    public DomainAuditorAware domainAuditorAware(){
        return new DomainAuditorAware();
    }

}

在resource目錄添加自動注入配置META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,這樣通過引入jar就可以自動使用該配置。

cn.cycad.jpa.auditing.config.JpaAuditingConfiguration

應(yīng)用示例

  1. 比如現(xiàn)在有一個User實體,我們通過繼承基類;
@Entity
@Table(name = "t_user")
@Data
public class User extends Domain {

    @Id
    private String id;

    private String caption;

}
  1. 定義用戶對應(yīng)的Repository;
public interface UserRepository extends JpaRepository<User,String> {
    
}
  1. 用戶的創(chuàng)建與修改基于UserRepository來實現(xiàn);
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserRepository userRepository;
    
    @PostMapping
    public User saveUser(@RequestBody User user){
        return userRepository.save(user);
    }

}
  1. 服務(wù);
@EnableJpaAuditing
@EntityScan({"cn.cycad.jpa.auditing.sample.entity"})
@EnableJpaRepositories(basePackages="cn.cycad.jpa.auditing.sample.repository")
@SpringBootApplication
public class SampleApplication{

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

}

通過注解@EnableJpaAuditing啟用。

  1. 編寫測試用例;
### 新增用戶
POST http://localhost:8080/user
Content-Type: application/json

{
  "id": "1",
  "caption": "tom"
}

這樣每次調(diào)用用戶新增請求時,默認(rèn)會將DomainAuditorAware的返回值填充到@CreatedBy與@LastModifiedBy修飾的字段上去。

實現(xiàn)原理

可以看到,實現(xiàn)該效果狐妖有以下幾個關(guān)鍵點(diǎn):

  1. 實體需要添加@EntityListeners(AuditingEntityListener.class),并且需要再對應(yīng)字段上標(biāo)識出需要注入的操作人、操作時間等。
  2. 需要編寫自己的實現(xiàn)AuditorAware<String>,這里只用關(guān)注創(chuàng)建人,時間沒必要處理,當(dāng)然也可以通過實現(xiàn)接口DateTimeProvider來擴(kuò)展。
  3. 需要基于JpaRepository接口實現(xiàn)用戶的新增或修改。
  4. 需要@EnableJpaAuditing開啟。
責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2024-08-29 08:58:30

JPA編寫數(shù)據(jù)操

2010-05-18 17:17:02

MySQL數(shù)據(jù)表

2021-01-26 13:40:44

mysql數(shù)據(jù)庫

2024-10-16 17:04:13

2021-08-11 16:57:03

數(shù)據(jù)中心光纖布線電纜管理

2010-06-09 18:14:02

2012-12-12 09:49:41

2017-03-13 13:21:34

Git處理大倉庫

2020-12-29 09:11:33

LinuxLinux內(nèi)核

2010-11-22 13:53:46

MySQL數(shù)據(jù)表

2019-08-15 10:20:19

云計算技術(shù)安全

2009-09-07 16:13:14

LINQ to SQL

2025-02-18 08:10:00

SQL數(shù)據(jù)表數(shù)據(jù)庫

2010-11-23 16:04:40

MySQL數(shù)據(jù)表

2013-06-04 09:16:29

Google存儲數(shù)據(jù)

2019-02-25 08:35:22

機(jī)器學(xué)習(xí)數(shù)據(jù)模型

2024-08-26 10:47:22

2022-04-19 09:00:52

ReactTypeScript

2021-05-31 10:47:17

SpringSecuritySession

2010-05-17 10:04:45

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號