使用Spring Data建立只讀儲存庫 | Baeldung

發表於2021-03-23

在這個簡短的教程中,我們將討論如何建立一個只讀的Spring Data Repository。

有時有必要從資料庫中讀取資料而無需修改它(CQRS)。在這種情況下,擁有隻讀的Repository介面將是完美的。它將提供讀取資料的功能,而無需任何人更改它的風險。

 

讓我們從一個包含spring-boot-starter-data-jpa依賴項的Spring Boot專案開始:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.4.3</version>
</dependency>

Spring Data受歡迎的CrudRepository介面包含在此依賴項中,該介面提供了大多數應用程式所需的所有基本CRUD操作(建立,讀取,更新,刪除)的方法。但是,它包含幾種修改資料的方法,我們需要一個只能讀取資料的儲存庫。

CrudRepository實際上擴充套件了另一個稱為Repository的介面。我們還可以擴充套件此介面以滿足我們的需求。

讓我們建立一個擴充套件Repository的新介面:

@NoRepositoryBean
public interface ReadOnlyRepository<T, ID> extends Repository<T, ID> {
    Optional<T> findById(ID id);
    List<T> findAll();
}

在這裡,我們僅定義了兩個只讀方法。此儲存庫訪問的實體將不受任何修改的影響。

還必須注意,我們必須使用@NoRepositoryBean批註來告訴Spring我們希望該儲存庫保持通用性,這一點也很重要。這使我們可以根據需要將只讀儲存庫重用於許多不同的實體。

接下來,我們將看到如何將實體繫結到我們的新ReadOnlyRepository。

 

假設我們有一個簡單的Book實體,我們想訪問它:

@Entity
public class Book {
    @Id
    @GeneratedValue
    private Long id;
    private String author;
    private String title;

    //getters and setters
}

現在我們有了一個可持久的實體,我們可以建立一個繼承自ReadOnlyRepository的儲存庫介面:

public interface BookReadOnlyRepository extends ReadOnlyRepository<Book, Long> {
    List<Book> findByAuthor(String author);
    List<Book> findByTitle(String title);
}

 

我們學習瞭如何擴充套件Spring Data的Repository介面,以建立可重用的只讀儲存庫。之後,我們將其繫結到一個簡單的Book實體,並編寫了一個測試,證明了其功能符合我們的預期。

與往常一樣,可以在GitHub上找到此程式碼的有效示例。

 

相關文章