查詢方法

標準的 CRUD 功能 repository 通常會對底層資料儲存進行查詢。使用 Spring Data,宣告這些查詢成為一個四步過程

  1. 宣告一個介面,該介面繼承 Repository 或其子介面之一,並將其型別設定為它應該處理的領域類和 ID 型別,如以下示例所示

    interface PersonRepository extends Repository<Person, Long> { … }
  2. 在介面上宣告查詢方法。

    interface PersonRepository extends Repository<Person, Long> {
      List<Person> findByLastname(String lastname);
    }
  3. 設定 Spring 為這些介面建立代理例項,可以使用 JavaConfigXML 配置

    • Java

    • XML

    import org.springframework.data.….repository.config.EnableJpaRepositories;
    
    @EnableJpaRepositories
    class Config { … }
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/data/jpa
         https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
    
       <repositories base-package="com.acme.repositories"/>
    
    </beans>

    本示例使用了 JPA 名稱空間。如果你為任何其他資料儲存使用 repository 抽象,則需要將其更改為你儲存模組的相應名稱空間宣告。換句話說,你應該將 jpa 替換為例如 mongodb

    請注意,JavaConfig 方式不會顯式配置包,因為預設使用註解類的包。要自定義掃描的包,請使用資料儲存特定的 repository 的 @EnableJpaRepositories 註解的 basePackage… 屬性之一。

  4. 注入 repository 例項並使用它,如以下示例所示

    class SomeClient {
    
      private final PersonRepository repository;
    
      SomeClient(PersonRepository repository) {
        this.repository = repository;
      }
    
      void doSomething() {
        List<Person> persons = repository.findByLastname("Matthews");
      }
    }

以下章節詳細解釋了每個步驟